home *** CD-ROM | disk | FTP | other *** search
/ Atari Forever 4 / Atari Forever 4.zip / Atari Forever 4.iso / PD_THEMA / TEXTVERA / TEXTWRIT / TEXTWRIT.GFA (.txt) < prev    next >
GFA-BASIC Atari  |  1998-03-14  |  75KB  |  3,600 lines

  1. ' -----------------------------------------------------------------------------
  2. ' Name          : TEXTWRITER ST V2.3
  3. ' Autor         : K-H Wallon,Leidenhofenerstraße 25, 3557 Ebsdorfergrund 6 (06424/4504)
  4. ' Datum         : 23.03.89
  5. ' Uhrzeit       : 153500
  6. ' Bemerkung     : Das Drucken klappt noch nicht richtig! Falsche Blattlänge!
  7. '               : Papierlen=ca.55 aber immernoch viele Fehler beim Drucken!
  8. '
  9. ' Ideen         : Einrücken bis Cursor, Seitenformat,
  10. '               : Besseres Formatieren der Zeilen
  11. '
  12. ' -----------------------------------------------------------------------------
  13. ON BREAK GOSUB stoppen
  14. ON ERROR GOSUB fehlerabfanger
  15. DEFBYT "a-z"
  16. DEFINT "r_"
  17. IF XBIOS(4)<>2
  18.   ALERT 1,"Warnung! Das Programm ist|für die 640x400 Auflösung|geschrieben worden.",1," Return ",a%
  19. ENDIF
  20. DEFBYT "a-z"
  21. DEFINT "r_"
  22. @anfang
  23. @rsc_init
  24. @rsc_load
  25. '
  26. ' RSC-Files noch ein bisschen verändern
  27. '
  28. OB_STATE(r_einstell%,ascmod&)=8
  29. OB_STATE(r_einstell%,twmod&)=0
  30. OB_STATE(r_textattr%,sfett&)=8
  31. OB_STATE(r_textattr%,sunter&)=8
  32. OB_STATE(r_textattr%,skursiv&)=8
  33. OB_STATE(r_textattr%,shell&)=8
  34. OB_STATE(r_textattr%,sscript&)=8
  35. OB_STATE(r_textattr%,ssup&)=8
  36. OB_STATE(r_einstell%,trennaus&)=8
  37. '
  38. @vorbereitungen
  39. ~FORM_DIAL(1,0,0,5,5,0,0,639,399)
  40. ~OBJC_DRAW(r_bild%,0,7,0,0,640,400)
  41. LINE 0,384,639,384
  42. COLOR 0
  43. LINE 0,383,639,383
  44. COLOR 1
  45. GET 0,384,639,399,men$
  46. @statuszeile
  47. ' PRINT CHR$(27)+"e";     ! VT52-Escape-Sequenz für Cursor einschalten
  48. DO    ! Die Endlosschleife für das Einlesen der Tasten
  49.   taste$=INKEY$
  50.   asc%=ASC(taste$)
  51.   scan%=ASC(RIGHT$(taste$))
  52.   IF asc%=27
  53.     @menue(FALSE)
  54.   ENDIF
  55.   IF LEN(taste$)=2  ! z.B. Cursorsteuerung, Undo- und Help-Taste, usw.
  56.     @kommando2
  57.     LPOKE XBIOS(14,1)+6,0   ! Tastaturpuffer leeren (Head- und Tail-
  58.   ENDIF
  59.   IF asc%>31 AND asc%<>127
  60.     @druckbares_zeichen
  61.   ELSE
  62.     IF LEN(taste$)=1
  63.       @kommando1           ! viele Control-Kommandos, Return, etc.
  64.       LPOKE XBIOS(14,1)+6,0   ! Tastaturpuffer leeren (Head- und Tailzeiger auf
  65.     ENDIF
  66.   ENDIF
  67.   IF MOUSEK=1
  68.     SELECT MOUSEY
  69.     CASE 15 TO 33
  70.       IF MOUSEX>(zlen%*cb%)
  71.         @zeilenlaenge
  72.       ENDIF
  73.     CASE 385 TO 400
  74.       @menue(TRUE)
  75.     DEFAULT
  76.       @cursor_setzen
  77.     ENDSELECT
  78.   ENDIF
  79.   IF MOUSEK=3
  80.     @plaziere_cursor
  81.   ENDIF
  82.   IF MOUSEK=2
  83.     IF MOUSEY<80
  84.       sp|=CRSCOL
  85.       PRINT CHR$(27)+"f";
  86.       von%=XBIOS(3)+2560
  87.       nach%=XBIOS(3)+3840
  88.       REPEAT
  89.         IF oberste%>0
  90.           DEC oberste%
  91.           BMOVE von%,nach%,26880
  92.           IF block!
  93.             IF oberste%+1>=blockanfang% AND oberste%+1<=blockende%
  94.               PRINT CHR$(27)+"p";
  95.             ELSE
  96.               PRINT CHR$(27)+"q";
  97.             ENDIF
  98.           ENDIF
  99.           PRINT AT(1,3);CHR$(27)+"l";zeile$(oberste%+1);
  100.         ENDIF
  101.       UNTIL MOUSEK<>2
  102.       @positionen
  103.       PRINT CHR$(27)+"e";
  104.       PRINT AT(sp|,3);
  105.     ENDIF
  106.     IF MOUSEY>320
  107.       sp|=CRSCOL
  108.       PRINT CHR$(27)+"f";
  109.       wo%=oberste%+23
  110.       von%=XBIOS(3)+3840
  111.       nach%=XBIOS(3)+2560
  112.       REPEAT
  113.         IF wo%=<max_zeilen%
  114.           BMOVE von%,nach%,26880
  115.           IF block!
  116.             IF wo%>=blockanfang% AND wo%<=blockende%
  117.               PRINT CHR$(27)+"p";
  118.             ELSE
  119.               PRINT CHR$(27)+"q";
  120.             ENDIF
  121.           ENDIF
  122.           PRINT AT(1,24);CHR$(27)+"l";zeile$(wo%);
  123.         ENDIF
  124.         INC wo%
  125.       UNTIL MOUSEK<>2
  126.       oberste%=wo%-23
  127.       @positionen
  128.       PRINT CHR$(27)+"e";
  129.       PRINT AT(sp|,24);
  130.     ENDIF
  131.   ENDIF
  132. LOOP
  133. '
  134. > PROCEDURE vorbereitungen
  135.   @cl_s
  136.   OPTION BASE 1
  137.   max_zeilen%=FRE(0)/85
  138.   max_zeilen%=MIN(max_zeilen%,5000)
  139.   DIM zeile$(max_zeilen%)  ! enthält die Textzeilen
  140.   DIM dummy$(max_zeilen%)  ! wird für einige Blockoperationen benötigt
  141.   DIM x%(10),y%(10),t$(10),l%(10),v%(10),i$(10),par!(7)
  142.   DIM tabulator!(80),ztabulator!(80)
  143.   DIM marke%(3),phr$(10)
  144.   DIM vorsilbe$(32)
  145.   RESTORE vorsilben
  146.   FOR i|=1 TO 32
  147.     READ vorsilbe$(i|)
  148.   NEXT i|
  149.   vokalmenge$="aeiouäöüyAEIOUÄÖÜY"
  150.   nichttrennen$="ch ph ei eu th st"
  151.   ARRAYFILL par!(),FALSE
  152.   ARRAYFILL tabulator!(),FALSE
  153.   ARRAYFILL ztabulator!(),FALSE
  154.   par!(5)=TRUE
  155.   basis%=LPEEK(ARRPTR(pointer%()))+4
  156.   dummy_basis%=LPEEK(ARRPTR(dummy%()))+4
  157.   asc!=FALSE
  158.   tw!=TRUE
  159.   links!=TRUE
  160.   rechts!=FALSE
  161.   blocksatz!=FALSE
  162.   zentre!=FALSE
  163.   insertmode!=TRUE
  164.   tausch!=TRUE
  165.   invers!=TRUE
  166.   altse$="   1"
  167.   i%=0
  168.   VDISYS 38
  169.   cb%=DPEEK(PTSOUT+4)
  170.   ch%=DPEEK(PTSOUT+6)
  171.   lh%=DPEEK(PTSOUT+2)
  172.   '
  173.   ' einstellen der Druckerparameter
  174.   '
  175.   elite$=CHR$(27)+"M"
  176.   pica$=CHR$(27)+"P"
  177.   nlq$=CHR$(27)+"x"+CHR$(1)
  178.   nlqaus$=CHR$(27)+"x"+CHR$(0)
  179.   schmal$=CHR$(27)+CHR$(15)
  180.   schmalaus$=CHR$(18)
  181.   prop$=CHR$(27)+"p"+CHR$(1)
  182.   propaus$=CHR$(27)+"p"+CHR$(0)
  183.   kur$=CHR$(27)+">"
  184.   kuraus$=CHR$(27)+"#"
  185.   dopp$=CHR$(27)+"G"
  186.   doppaus$=CHR$(27)+"H"
  187.   druck$=CHR$(27)+"R"+CHR$(2)+schmalaus$+elite$
  188.   zeistand%=12
  189.   '
  190.   ' Ende der Druckeranpassung
  191.   '
  192.   ' Allgemeine Variabeln zur Programmsteuerung
  193.   '
  194.   pfad$="\*.TXT"
  195.   filename$="testtext.txt"
  196.   menstr$="dbastceDBASTCE"
  197.   diskstr$="lsap-ofdwn-qx"
  198.   blockstr$="ae-ls-kvdp-m"
  199.   arbstr$="iu-zdtp-senf-1!2"+CHR$(34)+"3§"
  200.   einstr$="szdhatp--nvg"
  201.   tabulator%=5
  202.   papierlen%=64
  203.   seitelen%=58
  204.   lrand%=0
  205.   rrand%=79
  206.   kopfob%=0
  207.   aboben%=2
  208.   fuss%=0
  209.   abunten%=2
  210.   zlen%=79
  211.   menue%=1
  212.   oberste%=0        ! Nummer der Textzeile in der ersten Bildschirmzeile
  213.   trenne!=TRUE
  214.   '
  215.   ' Array für Seitengrenzen anlegen
  216.   '
  217.   DIM seiten!(max_zeilen%)
  218.   ARRAYFILL seiten!(),FALSE
  219.   OPTION BASE 0
  220.   FOR i%=0 TO max_zeilen%-1 STEP seitelen%
  221.     seiten!(i%)=TRUE
  222.   NEXT i%
  223.   FOR i|=0 TO seitelen%-1
  224.     seiten!(i|)=FALSE
  225.   NEXT i|
  226.   VOID XBIOS(21,3,-1)     ! Cursorblinken im compilierten Programm ausschalten
  227.   PRINT CHR$(27)+"w";     ! VT52 für automatischen Zeilenüberlauf abschalten
  228.   '
  229.   ' Tabulatorleiste erstellen
  230.   '
  231.   OPTION BASE 0
  232.   FOR i|=0 TO zlen% STEP tabulator%
  233.     tabulator!(i|)=TRUE
  234.   NEXT i|
  235.   OPTION BASE 1
  236.   IF BIOS(11,-1) AND 16=16
  237.     PRINT AT(34,1);"©"
  238.   ELSE
  239.     PRINT AT(34,1);" "
  240.   ENDIF
  241.   PRINT AT(1,3);
  242.   @mauslesen
  243. RETURN
  244. > PROCEDURE druckbares_zeichen
  245.   LOCAL sp|,zp|,laenge|,raus!
  246.   zp|=CRSLIN
  247.   sp|=CRSCOL
  248.   nr%=(oberste%-2)+CRSLIN
  249.   um|=BIOS(11,-1)
  250.   IF asc%=54  ! Cursor rechts zum Wortanfang
  251.     IF BIOS(11,-1)>=1 AND BIOS(11,-1)<=3  ! mit der Shift Taste
  252.       nr%=(oberste%-2)+CRSLIN
  253.       IF LEN(zeile$(nr%))>sp|
  254.         npos|=INSTR(sp|,zeile$(nr%)," ")
  255.         IF npos|>0
  256.           sp|=npos|+1
  257.         ENDIF
  258.       ENDIF
  259.       PRINT AT(sp|,zp|);
  260.       GOTO druckbar_ende
  261.     ENDIF
  262.   ENDIF
  263.   '
  264.   IF asc%=52  ! Cursor Links
  265.     IF BIOS(11,-1)>=1 AND BIOS(11,-1)<=3  ! mit der Shift Taste
  266.       raus!=FALSE
  267.       nr%=(oberste%-2)+CRSLIN
  268.       laenge|=LEN(zeile$(nr%))
  269.       IF laenge|>sp|
  270.         FOR i|=sp| DOWNTO 1
  271.           IF MID$(zeile$(nr%),i|,1)=" "
  272.             npos|=i|
  273.             raus!=TRUE
  274.           ENDIF
  275.           EXIT IF raus!
  276.         NEXT i|
  277.         IF npos|>1
  278.           sp|=npos|-1
  279.         ENDIF
  280.       ENDIF
  281.       PRINT AT(sp|,zp|);
  282.       GOTO druckbar_ende
  283.     ENDIF
  284.   ENDIF
  285.   IF asc%=50        ! Cursor runter
  286.     IF BTST(um|,0) OR BTST(um|,1)  ! mit der Shift oder Control-Taste
  287.       @page_down
  288.       GOTO druckbar_ende
  289.     ENDIF
  290.   ENDIF
  291.   IF asc%=56
  292.     IF BTST(um|,0) OR BTST(um|,1)! mit der Shift oder Control-Taste
  293.       @page_up
  294.       GOTO druckbar_ende
  295.     ENDIF
  296.   ENDIF
  297.   IF block!
  298.     IF wo%>=blockanfang% AND wo%<=blockende%
  299.       PRINT CHR$(27)+"p";
  300.     ELSE
  301.       PRINT CHR$(27)+"q";
  302.     ENDIF
  303.   ENDIF
  304.   anzahl_zeilen%=MAX(anzahl_zeilen%,nr%)
  305.   laenge|=LEN(zeile$(nr%))
  306.   IF laenge|<sp|-1
  307.     zeile$(nr%)=zeile$(nr%)+SPACE$(sp|-laenge|-1)
  308.   ENDIF
  309.   IF LEN(zeile$(nr%))<=zlen%-1
  310.     IF insertmode!
  311.       zeile$(nr%)=LEFT$(zeile$(nr%),sp|-1)+taste$+MID$(zeile$(nr%),sp|)
  312.       PRINT MID$(zeile$(nr%),sp|);
  313.       PRINT AT(sp|+1,zp|);
  314.     ELSE
  315.       IF sp|>laenge|
  316.         zeile$(nr%)=LEFT$(zeile$(nr%),sp|)+taste$+MID$(zeile$(nr%),sp|)
  317.       ELSE
  318.         MID$(zeile$(nr%),sp|)=taste$
  319.       ENDIF
  320.       PRINT taste$;
  321.     ENDIF
  322.   ELSE
  323.     IF sp|<zlen%
  324.       @format_zurueck
  325.       PRINT AT(sp|+1,zp|);
  326.     ELSE
  327.       @trenn
  328.     ENDIF
  329.   ENDIF
  330. druckbar_ende:
  331.   @positionen
  332. RETURN
  333. > PROCEDURE kommando1
  334.   LOCAL sp|,zp|,bild_oben$,gehe_in$,i|,alti|,raus!,spa|,laenge|
  335.   kommandocode%=ASC(taste$)
  336.   umschalt%=BIOS(11,-1)
  337.   '
  338.   IF kommandocode%=16  ! Control+P: Druckereinstellung
  339.     zp|=CRSLIN
  340.     sp|=CRSCOL
  341.     PRINT CHR$(27)+"f";
  342.     @einstellung_grafik
  343.     @einstellung_select
  344.     @ausgabe_ab_zeile(oberste%+1)
  345.     PRINT CHR$(27)+"e";
  346.     PRINT AT(sp|,zp|);
  347.   ENDIF
  348.   '
  349.   IF kommandocode%=9 AND umschalt%=4 OR umschalt%=20  ! Control+I: Invertieren des Bildschirms
  350.     '                                 ! mit umschalt% sonst wie TAB
  351.     IF invers!
  352.       SETCOLOR 0,7,7,7
  353.       invers!=FALSE
  354.     ELSE
  355.       SETCOLOR 0,0,0,0
  356.       invers!=TRUE
  357.     ENDIF
  358.     GOTO raus_hier
  359.   ENDIF
  360.   '
  361.   IF kommandocode%=4  ! Control+D: Text drucken
  362.     @text_drucken
  363.     GOTO raus_hier
  364.   ENDIF
  365.   '
  366.   IF kommandocode%=6  ! Control+F: Text suchen
  367.     IF suchstring$<>""
  368.       @suchen_ab((oberste%-2)+CRSLIN+1)
  369.     ENDIF
  370.     GOTO raus_hier
  371.   ENDIF
  372.   '
  373.   IF kommandocode%=7  ! Control+G
  374.     PRINT CHR$(27)+"f";   ! Cursor ausschalten
  375.     GET 0,0,639,20,bild_oben$
  376.     zp|=CRSLIN
  377.     sp|=CRSCOL
  378.     PRINT AT(1,1);SPACE$(zlen%-1);
  379.     LINE 0,18,639,18
  380.     LINE 0,19,639,19
  381.     PRINT AT(1,1);"Gehe zu Seite: "
  382.     PRINT AT(16,1);
  383.     FORM INPUT 5,gehe_in$
  384.     gehe_in$=STR$((VAL(gehe_in$)-1)*seitelen%)
  385.     IF VAL(gehe_in$)=0
  386.       gehe_in$="1"
  387.     ENDIF
  388.     PUT 0,0,bild_oben$
  389.     PRINT CHR$(27)+"e";   ! Cursor einschalten
  390.     IF VAL(gehe_in$)<1 OR VAL(gehe_in$)>max_zeilen%
  391.       ALERT 1,"Diese Seite|existiert nicht.",1," Return ",a%
  392.       PRINT AT(1,3);
  393.     ELSE
  394.       oberste%=VAL(gehe_in$)-1
  395.       @ausgabe_ab_zeile(oberste%+1)
  396.       PRINT AT(1,3);
  397.     ENDIF
  398.     @statuszeile
  399.     GOTO raus_hier
  400.   ENDIF
  401.   '
  402.   IF kommandocode%=9   ! Tabulator anspringen
  403.     sp|=CRSCOL
  404.     zp|=CRSLIN
  405.     i|=sp|
  406.     alti|=i|
  407.     raus!=FALSE
  408.     REPEAT
  409.       IF i|<zlen%-1
  410.         INC i|
  411.       ELSE
  412.         raus!=TRUE
  413.         i|=alti|
  414.       ENDIF
  415.     UNTIL tabulator!(i|)=TRUE OR raus!=TRUE
  416.     sp|=i|
  417.     PRINT AT(sp|,zp|);
  418.     GOTO raus_hier
  419.   ENDIF
  420.   '
  421.   IF kommandocode%=18  ! Control+R: suchen und ersetzen
  422.     IF suchstring$<>""
  423.       @ersetzen_ab((oberste%-2)+CRSLIN)
  424.     ENDIF
  425.     GOTO raus_hier
  426.   ENDIF
  427.   '
  428.   IF kommandocode%=20  ! Control+T: Tabulator setzen/löschen
  429.     sp|=CRSCOL
  430.     tabulator!(sp|)=NOT (tabulator!(sp|))
  431.     @tableiste
  432.     GOTO raus_hier
  433.   ENDIF
  434.   '
  435.   IF kommandocode%=3   ! Control+C : Cursorgeschwindigkeit
  436.     ALERT 2,"Welche Cursorgeschwindigkeit|wollen Sie einstellen ?",2,"Schnell|Mittel|Langsam",a|
  437.     IF a|=3
  438.       INC a|
  439.     ENDIF
  440.     VOID XBIOS(35,10,a|)
  441.     GOTO raus_hier
  442.   ENDIF
  443.   '
  444.   IF kommandocode%=26  ! Control+Z: gehe ans Textende
  445.     oberste%=MAX(1,anzahl_zeilen%-24)+2
  446.     @ausgabe_ab_zeile(oberste%+1)
  447.     GOTO raus_hier
  448.   ENDIF
  449.   '
  450.   IF kommandocode%=8  ! Backspace-Taste
  451.     IF CRSCOL>1
  452.       nr%=CRSLIN+(oberste%-2)
  453.       IF LEN(zeile$(nr%))>=CRSCOL-2 AND LEN(zeile$(nr%))>=1
  454.         zp|=CRSLIN
  455.         sp|=CRSCOL
  456.         PRINT AT(sp|-1,zp|);MID$(zeile$(nr%),sp|);" ";
  457.         PRINT AT(sp|-1,zp|);
  458.         zeile$(nr%)=LEFT$(zeile$(nr%),sp|-2)+MID$(zeile$(nr%),sp|)
  459.         @format_absatz
  460.       ELSE
  461.         PRINT AT(CRSCOL-1,CRSLIN);
  462.       ENDIF
  463.     ELSE
  464.       IF CRSLIN<4
  465.         @scroll_runter
  466.         PRINT AT(LEN(zeile$(oberste%+1)),3);
  467.       ELSE
  468.         IF LEN(zeile$(oberste%-3+CRSLIN))<zlen%
  469.           a|=1
  470.         ELSE
  471.           a|=0
  472.         ENDIF
  473.         PRINT AT(a|+LEN(zeile$(oberste%-3+CRSLIN)),CRSLIN-1);
  474.       ENDIF
  475.       PRINT CHR$(7);  ! Fehlerglocke
  476.     ENDIF
  477.     GOTO raus_hier
  478.   ENDIF
  479.   '
  480.   IF kommandocode%=13   ! Return-Taste: gehe an den Anfang der nächsten Zeile.
  481.     nr%=oberste%-2+CRSLIN
  482.     IF RIGHT$(zeile$(nr%))<>CHR$(174)
  483.       zeile$(nr%)=zeile$(nr%)+CHR$(174)
  484.       IF rechts! !rechtsbündig im Speicher
  485.         zeile$(nr%)=TRIM$(zeile$(nr%))
  486.         zeile$(nr%)=SPACE$(zlen%-LEN(zeile$(nr%)))+zeile$(nr%)
  487.       ELSE IF zentre!
  488.         zeile$(nr%)=TRIM$(zeile$(nr%))
  489.         laenge|=LEN(zeile$(nr%))
  490.         spa|=zlen%/2-(TRUNC(laenge|/2))
  491.         zeile$(nr%)=SPACE$(spa|)+zeile$(nr%)
  492.       ENDIF
  493.       PRINT AT(1,CRSLIN);zeile$(nr%);
  494.     ENDIF
  495.     IF CRSLIN=24
  496.       @scroll_rauf
  497.       PRINT AT(1,24);
  498.     ELSE
  499.       PRINT AT(1,CRSLIN+1);
  500.     ENDIF
  501.     GOTO raus_hier
  502.   ENDIF
  503.   '
  504.   IF kommandocode%=127  ! Delete-Taste
  505.     nr%=CRSLIN+(oberste%-2)
  506.     IF LEN(zeile$(nr%))>=CRSCOL
  507.       zp|=CRSLIN
  508.       sp|=CRSCOL
  509.       zeile$(nr%)=LEFT$(zeile$(nr%),sp|-1)+MID$(zeile$(nr%),sp|+1)
  510.       PRINT MID$(zeile$(nr%),sp|);" ";
  511.       PRINT AT(sp|,zp|);
  512.       @format_absatz
  513.     ENDIF
  514.   ENDIF
  515.   '
  516.   IF kommandocode%=19 ! Control + S = Seitenformat einstellen
  517.     @seite_zeigen  !nformat
  518.   ENDIF
  519. raus_hier:
  520.   @positionen
  521.   DEFMOUSE pfeil$
  522. RETURN
  523. > PROCEDURE kommando2
  524.   LOCAL sp|,zp|,laenge|
  525.   kommandocode%=ASC(RIGHT$(taste$))
  526.   umschalt%=BIOS(11,-1) AND 8
  527.   '
  528.   IF kommandocode%=72   ! Cursor rauf
  529.     scrol!=FALSE
  530.     IF CRSLIN=3
  531.       @scroll_runter
  532.     ELSE
  533.       PRINT CHR$(27)+"A";
  534.     ENDIF
  535.     GOTO ausstieg_aus_procedure
  536.   ENDIF
  537.   '
  538.   IF kommandocode%=80   ! Cursor runter
  539.     scrol!=TRUE
  540.     anz%=oberste%-2+CRSLIN
  541.     anzahl_zeilen%=MAX(anz%,anzahl_zeilen%)
  542.     IF CRSLIN=24
  543.       @scroll_rauf
  544.     ELSE
  545.       PRINT CHR$(27)+"B";
  546.     ENDIF
  547.     GOTO ausstieg_aus_procedure
  548.   ENDIF
  549.   '
  550.   '
  551.   IF kommandocode%=77   ! Cursor rechts
  552.     IF CRSCOL<1+LEN(zeile$(oberste%-2+CRSLIN))  !zlen%
  553.       PRINT CHR$(27)+"C";
  554.       @positionen
  555.     ELSE
  556.       IF CRSLIN>23
  557.         @scroll_rauf
  558.         PRINT AT(1,24);
  559.       ELSE
  560.         PRINT AT(1,CRSLIN+1);
  561.       ENDIF
  562.     ENDIF
  563.     GOTO ausstieg_aus_procedure
  564.   ENDIF
  565.   '
  566.   IF kommandocode%=75   ! Cursor links
  567.     IF CRSCOL>1
  568.       PRINT CHR$(27)+"D";
  569.       @positionen
  570.     ELSE
  571.       IF CRSLIN<4
  572.         @scroll_runter
  573.         PRINT AT(LEN(zeile$(oberste%+1)),3);
  574.       ELSE
  575.         IF LEN(zeile$(oberste%-3+CRSLIN))<zlen%
  576.           a|=1
  577.         ELSE
  578.           a|=0
  579.         ENDIF
  580.         PRINT AT(a|+LEN(zeile$(oberste%-3+CRSLIN)),CRSLIN-1);
  581.       ENDIF
  582.     ENDIF
  583.     GOTO ausstieg_aus_procedure
  584.   ENDIF
  585.   '
  586.   IF kommandocode%=59  ! F1
  587.     @text_laden
  588.     GOTO ausstieg_aus_procedure
  589.   ENDIF
  590.   '
  591.   IF kommandocode%=60  ! F2
  592.     @text_speichern
  593.     GOTO ausstieg_aus_procedure
  594.   ENDIF
  595.   '
  596.   IF kommandocode%=61   ! F3
  597.     @zeile_einfuegen
  598.     GOTO ausstieg_aus_procedure
  599.   ENDIF
  600.   '
  601.   IF kommandocode%=62  ! F4
  602.     @zeile_loeschen
  603.     GOTO ausstieg_aus_procedure
  604.   ENDIF
  605.   '
  606.   IF kommandocode%=63  ! F5
  607.     sp|=CRSCOL
  608.     zp|=CRSLIN
  609.     links!=TRUE
  610.     rechts!=FALSE
  611.     blocksatz!=FALSE
  612.     zentre!=FALSE
  613.     PRINT AT(27,1);"Links "
  614.     PRINT AT(sp|,zp|);
  615.   ENDIF
  616.   '
  617.   IF kommandocode%=64  ! F6
  618.     sp|=CRSCOL
  619.     zp|=CRSLIN
  620.     links!=FALSE
  621.     rechts!=TRUE
  622.     blocksatz!=FALSE
  623.     zentre!=FALSE
  624.     PRINT AT(27,1);"Recht "
  625.     PRINT AT(sp|,zp|);
  626.   ENDIF
  627.   '
  628.   IF kommandocode%=65  ! F7
  629.     sp|=CRSCOL
  630.     zp|=CRSLIN
  631.     links!=FALSE
  632.     rechts!=FALSE
  633.     blocksatz!=FALSE
  634.     zentre!=TRUE
  635.     PRINT AT(27,1);"Zentr "
  636.     PRINT AT(sp|,zp|);
  637.   ENDIF
  638.   '
  639.   IF kommandocode%=66  ! F8
  640.     sp|=CRSCOL
  641.     zp|=CRSLIN
  642.     links!=FALSE
  643.     rechts!=FALSE
  644.     blocksatz!=TRUE
  645.     zentre!=FALSE
  646.     PRINT AT(27,1);"Blocks"
  647.     PRINT AT(sp|,zp|);
  648.   ENDIF
  649.   '
  650.   IF kommandocode%=67   ! F9
  651.     @nochmal
  652.   ENDIF
  653.   '
  654.   IF kommandocode%=68   ! F10
  655.     nr%=oberste%-2+CRSLIN
  656.     IF RIGHT$(zeile$(nr%))=CHR$(174)
  657.       p%=nr%
  658.     ELSE
  659.       FOR i%=nr% TO anzahl_zeilen%
  660.         IF RIGHT$(zeile$(i%))=CHR$(174)
  661.           p%=i%
  662.         ENDIF
  663.         EXIT IF p%>0
  664.       NEXT i%
  665.     ENDIF
  666.     @textformat(nr%,p%)
  667.   ENDIF
  668.   '
  669.   IF kommandocode%=97  ! Undo-Taste für aktuellen Text löschen
  670.   ENDIF
  671.   '
  672.   IF kommandocode%=98  ! Help-Taste für Anzeige der Editorkommandos
  673.   ENDIF
  674.   '
  675.   '
  676.   IF kommandocode%=84  ! Shift+F1: Blockanfang markieren
  677.     @block_anfang
  678.   ENDIF
  679.   '
  680.   IF kommandocode%=85  ! Shift+F2: Blockende markieren
  681.     @block_ende
  682.   ENDIF
  683.   '
  684.   IF kommandocode%=86  ! Shift+F3: Block kopieren
  685.     @block_kopieren
  686.   ENDIF
  687.   '
  688.   IF kommandocode%=87  ! Shift+F4: Block verschieben
  689.     @block_verschieben
  690.   ENDIF
  691.   '
  692.   IF kommandocode%=88  ! Shift+F5: Block speichern
  693.     @block_speichern
  694.   ENDIF
  695.   '
  696.   IF kommandocode%=89  ! Shift+F6: Block mergen
  697.     @block_mergen
  698.   ENDIF
  699.   '
  700.   IF kommandocode%=90  ! Shift+F7: Block drucken
  701.     @block_drucken
  702.   ENDIF
  703.   '
  704.   IF kommandocode%=91  ! Shift+F8: Block löschen
  705.     @block_loeschen
  706.   ENDIF
  707.   '
  708.   IF kommandocode%=92  ! Shift+F9: Blockmarkierung aufheben
  709.     @block_markierung
  710.   ENDIF
  711.   '
  712.   IF kommandocode%=93  ! Shift F10: Umschalten auf zweiten Textspeicher!
  713.   ENDIF
  714.   '
  715.   IF kommandocode%=116  ! Control+Cursor rechts, springe ans Zeilenende
  716.     nr%=(oberste%-2)+CRSLIN
  717.     laenge|=LEN(zeile$(nr%))
  718.     IF laenge|<zlen%
  719.       INC laenge|
  720.     ENDIF
  721.     PRINT AT(laenge|,CRSLIN);
  722.     @positionen
  723.   ENDIF
  724.   '
  725.   IF kommandocode%=115  ! Control+Cursor links, springe an Zeilenanfang
  726.     PRINT AT(1,CRSLIN);
  727.   ENDIF
  728.   '
  729.   IF kommandocode%=71  ! Home-Taste
  730.     PRINT AT(1,3);
  731.   ENDIF
  732.   '
  733.   IF kommandocode%=82  ! Insert-Taste Leerstelle einfügen
  734.     @zeile_einfuegen
  735.   ENDIF
  736.   '
  737.   IF kommandocode%=119   ! Control+Home
  738.     @text_anfang
  739.   ENDIF
  740. ausstieg_aus_procedure:
  741.   @positionen
  742. RETURN
  743. > PROCEDURE scroll_rauf
  744.   LOCAL sp|
  745.   IF oberste%+22=<max_zeilen%
  746.     INC oberste%
  747.     sp|=CRSCOL
  748.     PRINT CHR$(27)+"f";      ! Cursor ausschalten
  749.     BMOVE XBIOS(3)+3840,XBIOS(3)+2560,26880    !28160
  750.     IF block!
  751.       IF oberste%+22>=blockanfang% AND oberste%+22<=blockende%
  752.         PRINT CHR$(27)+"p";   ! revers on
  753.       ELSE
  754.         PRINT CHR$(27)+"q";   ! revers off
  755.       ENDIF
  756.     ENDIF
  757.     PRINT AT(1,24);CHR$(27)+"e";CHR$(27)+"l";zeile$(oberste%+22);
  758.     PRINT AT(sp|,CRSLIN);
  759.   ELSE
  760.     PRINT CHR$(7);  ! Fehlerglocke
  761.   ENDIF
  762. RETURN
  763. > PROCEDURE scroll_runter
  764.   LOCAL sp|
  765.   IF oberste%>0
  766.     DEC oberste%
  767.     sp|=CRSCOL
  768.     PRINT CHR$(27)+"f";      ! Cursor ausschalten
  769.     BMOVE XBIOS(3)+2560,XBIOS(3)+3840,26880  !29440     !28160
  770.     IF block!
  771.       IF oberste%+1>=blockanfang% AND oberste%+1<=blockende%
  772.         PRINT CHR$(27)+"p";  ! revers on
  773.       ELSE
  774.         PRINT CHR$(27)+"q";  ! revers off
  775.       ENDIF
  776.     ENDIF
  777.     PRINT AT(1,3);CHR$(27)+"e";CHR$(27)+"l";zeile$(oberste%+1);
  778.     PRINT AT(sp|,CRSLIN);
  779.   ELSE
  780.     PRINT CHR$(7);  ! Fehlerglocke
  781.   ENDIF
  782. RETURN
  783. > PROCEDURE ausgabe_ab_zeile(nr%)
  784.   LOCAL bis%
  785.   @cl_s
  786.   IF anzahl_zeilen%>0
  787.     bis%=MIN(nr%+21,anzahl_zeilen%)
  788.     IF nr%=anzahl_zeilen%
  789.       IF block!
  790.         IF nr%>=blockanfang% AND nr%<=blockende%
  791.           PRINT CHR$(27)+"p";  ! revers on
  792.         ELSE
  793.           PRINT CHR$(27)+"q";  ! revers off
  794.         ENDIF
  795.       ENDIF
  796.       PRINT zeile$(nr%)
  797.     ENDIF
  798.     IF nr%<anzahl_zeilen%
  799.       IF bis%>nr%
  800.         FOR i%=nr% TO bis%-1
  801.           IF block!
  802.             IF i%>=blockanfang% AND i%<=blockende%
  803.               PRINT CHR$(27)+"p";  ! revers on
  804.             ELSE
  805.               PRINT CHR$(27)+"q";  ! revers off
  806.             ENDIF
  807.           ENDIF
  808.           PRINT zeile$(i%)   ! Ausgeben mit Linefeed
  809.           IF seiten!(i%)=TRUE
  810.             '            LINE 0,(1+i%-nr%)*ch%,639,(1+i%-nr%)*ch%
  811.             LINE 0,(2+i%-nr%)*ch%-1,639,(2+i%-nr%)*ch%-1
  812.           ENDIF
  813.         NEXT i%
  814.       ENDIF
  815.       IF block!
  816.         IF bis%>=blockanfang% AND bis%<=blockende%
  817.           PRINT CHR$(27)+"p";  ! revers on
  818.         ELSE
  819.           PRINT CHR$(27)+"q";  ! revers off
  820.         ENDIF
  821.       ENDIF
  822.       PRINT zeile$(bis%);   ! Letzte Zeile ohne Linefeed ausgeben.
  823.     ENDIF
  824.   ENDIF
  825. RETURN
  826. > PROCEDURE plaziere_cursor
  827.   LOCAL mark!,sp|,zp|,cx|,cy|,mx%,my%,anx%,any%
  828.   zp|=INT(MOUSEY/16)+1
  829.   IF zp|>2
  830.     sp|=INT(MOUSEX/8)+1
  831.     anx%=MOUSEX
  832.     any%=MOUSEY
  833.     blockanfang%=(oberste%-2)+zp|
  834.     PRINT AT(sp|,zp|);
  835.     GRAPHMODE 3
  836.     DEFLINE 1,1,0,0
  837.     BOX 639,399,640,400
  838.     mx%=MOUSEX
  839.     my%=MOUSEY
  840.     WHILE MOUSEK=3
  841.       IF mx%<>MOUSEX OR my%<>MOUSEY   ! verhindert Flimmern des Cursors
  842.         cx|=MOUSEX/8+1
  843.         cy|=MOUSEY/16+1
  844.         PRINT AT(cx|,cy|);
  845.         IF cy|>blockanfang% AND cy|<3
  846.           @scroll_runter
  847.         ENDIF
  848.         IF cy|=>24
  849.           @scroll_rauf
  850.         ENDIF
  851.         BOX anx%,any%,mx%,my%
  852.         BOX anx%,any%,mx%,my%
  853.         mx%=MOUSEX
  854.         my%=MOUSEY
  855.       ENDIF
  856.     WEND
  857.     PRINT CHR$(27)+"f";
  858.     blockende%=(oberste%-2)+INT(MOUSEY/16)+1
  859.     IF blockende%>=blockanfang%
  860.       block!=TRUE
  861.     ELSE
  862.       block!=FALSE
  863.     ENDIF
  864.     GRAPHMODE 1
  865.     @ausgabe_ab_zeile(oberste%+1)
  866.     PRINT CHR$(27)+"e";
  867.     PRINT AT(sp|,zp|);
  868.   ENDIF
  869.   @statuszeile
  870. RETURN
  871. > PROCEDURE cursor_setzen
  872.   LOCAL sp|,zp|,mx%,my%
  873.   zp|=INT(MOUSEY/16)+1
  874.   sp|=INT(MOUSEX/8)+1
  875.   IF zp|>2 AND zp|<25
  876.     IF sp|<=zlen%
  877.       PRINT AT(sp|,zp|);
  878.     ENDIF
  879.   ENDIF
  880. RETURN
  881. > PROCEDURE suchen_ab(zeile%)
  882.   LOCAL found!,p|
  883.   found!=FALSE
  884.   IF zeile%<=anzahl_zeilen%
  885.     FOR i%=zeile% TO anzahl_zeilen%
  886.       p|=INSTR(zeile$(i%),suchstring$)
  887.       IF p|<>0
  888.         found!=TRUE
  889.       ENDIF
  890.       EXIT IF found!
  891.     NEXT i%
  892.   ENDIF
  893.   IF found!
  894.     oberste%=MAX(0,i%-1)
  895.     @ausgabe_ab_zeile(i%)
  896.     PRINT AT(p|,3);
  897.   ELSE
  898.     oberste%=MAX(0,anzahl_zeilen%-24)
  899.     @ausgabe_ab_zeile(oberste%+1)
  900.     ALERT 1,"Suchstring nicht gefunden.",1," Return ",a%
  901.   ENDIF
  902.   DEFMOUSE pfeil$
  903. RETURN
  904. > PROCEDURE ersetzen_ab(zeile%)
  905.   LOCAL found!,found_at%,p|,wo|
  906.   found!=FALSE
  907.   IF zeile%<=anzahl_zeilen%
  908.     FOR i%=zeile% TO anzahl_zeilen%
  909.       wo|=INSTR(zeile$(i%),suchstring$)
  910.       IF wo|<>0
  911.         found!=TRUE
  912.       ENDIF
  913.       EXIT IF found!
  914.     NEXT i%
  915.   ENDIF
  916.   found_at%=i%
  917.   IF found!
  918.     IF LEN(zeile$(i%))+LEN(ersatzstring$)-LEN(suchstring$)>zlen%
  919.       ALERT 1,"Ersetzen nicht möglich,|Ersatzstring ist zu lang.",1," Return ",a%
  920.     ELSE
  921.       nr%=i%
  922.       zeile$(nr%)=LEFT$(zeile$(nr%),wo%-1)+ersatzstring$+MID$(zeile$(nr%),wo%+LEN(suchstring$))
  923.     ENDIF
  924.     oberste%=i%-1
  925.     @ausgabe_ab_zeile(oberste%+1)
  926.     PRINT AT(wo|,3);
  927.   ELSE
  928.     oberste%=MAX(0,anzahl_zeilen%-24)
  929.     @ausgabe_ab_zeile(oberste%+1)
  930.     ALERT 1,"Suchstring nicht gefunden.",1," Return ",a%
  931.   ENDIF
  932.   DEFMOUSE pfeil$
  933. RETURN
  934. > PROCEDURE drucken(von%,bis%)
  935.   LOCAL z|,se$,i1|,dzeile$,restseite%,a|,kopfzeile$,fusszeile$,zeiger%
  936.   zeiger%=von%
  937.   i%=1
  938.   IF GEMDOS(17)
  939.     '
  940.     ' erstellen von kopf und Fußzeilen
  941.     '
  942.     IF kopfl$<>"" OR kopfm$<>"" OR kopfr$<>""
  943.       @seitenummer_drucken(kopfl$)
  944.       @seitenummer_drucken(kopfm$)
  945.       @seitenummer_drucken(kopfr$)
  946.       kopfzeile$=kopfl$+SPACE$(25-LEN(kopfl$))
  947.       kopfzeile$=kopfzeile$+SPACE$(12-LEN(kopfm$)/2)+kopfm$+SPACE$(12-LEN(kopfm$)/2)
  948.       kopfzeile$=kopfzeile$+SPACE$(25-LEN(kopfr$))+kopfr$
  949.       @zeile_testen(kopfzeile$)
  950.     ENDIF
  951.     IF fussl$<>"" OR fussm$<>"" OR fussr$<>""
  952.       @seitenummer_drucken(fussl$)
  953.       @seitenummer_drucken(fussm$)
  954.       @seitenummer_drucken(fussr$)
  955.       fusszeile$=fussl$+SPACE$(25-LEN(fussl$))
  956.       fusszeile$=fusszeile$+SPACE$(12-LEN(fussm$)/2)+fussm$+SPACE$(12-LEN(fussm$)/2)
  957.       fusszeile$=fusszeile$+SPACE$(25-LEN(fussr$))+fussr$
  958.       @zeile_testen(fusszeile$)
  959.     ENDIF
  960.     OPEN "",#4,"LST:"
  961.     REPEAT
  962.       IF kopfob%>0 OR kopfzeile$<>""
  963.         FOR i|=1 TO kopfob%
  964.           PRINT #4,
  965.         NEXT i|
  966.         IF kopfzeile$<>""
  967.           PRINT #4,druck$;kopfzeile$
  968.         ENDIF
  969.       ENDIF
  970.       IF aboben%>0
  971.         FOR i1|=1 TO aboben%
  972.           PRINT #4,
  973.         NEXT i1|
  974.       ENDIF
  975.       FOR i%=zeiger% TO zeiger%+seitelen%-1
  976.         '
  977.         ' Anzeigen der Seitennummer auf dem Bildschirm
  978.         '
  979.         IF seiten!(i%)
  980.           se$=STR$(INT(i%/seitelen%)+1)
  981.           TEXT 225,224,se$
  982.         ENDIF
  983.         '
  984.         ' Abschneiden des Absatzzeichens
  985.         '
  986.         IF RIGHT$(zeile$(i%))=CHR$(174)
  987.           dzeile$=LEFT$(zeile$(i%),LEN(zeile$(i%))-1)
  988.         ELSE
  989.           dzeile$=zeile$(i%)
  990.         ENDIF
  991.         '
  992.         ' anpassen des Zeichensatzes an den Drucker
  993.         '
  994.         @zeile_testen(dzeile$)
  995.         '
  996.         ' Aktuelle Zeile 'DZEILE$' ausdrucken
  997.         '
  998.         IF par!(7)      ! Zeile zweimal drucken
  999.           PRINT #4,SPACE$(lrand%);druck$;dzeile$;CHR$(13);CHR$(27);"A";CHR$(0)
  1000.           PRINT #4,SPACE$(lrand%);dzeile$;CHR$(27);"A";CHR$(11)
  1001.         ELSE            ! Zeile einmal drucken
  1002.           PRINT #4,SPACE$(lrand%);druck$;dzeile$
  1003.         ENDIF
  1004.       NEXT i%
  1005.       '
  1006.       ' Fußzeile Ausgeben
  1007.       '
  1008.       IF fuss%>0 OR fusszeile$<>""
  1009.         FOR i|=1 TO fuss%
  1010.           PRINT #4,
  1011.         NEXT i|
  1012.         IF fusszeile$<>""
  1013.           PRINT #4,druck$;fusszeile$
  1014.         ENDIF
  1015.       ENDIF
  1016.       '
  1017.       ' Abstand von unten ausgeben
  1018.       '
  1019.       IF abunten%>0
  1020.         FOR i1|=1 TO abunten%
  1021.           PRINT #4,
  1022.         NEXT i1|
  1023.       ENDIF
  1024.       '
  1025.       ' Zeiger auf den nächsten Seitenanfang stellen
  1026.       '
  1027.       ADD zeiger%,seitelen%
  1028.       '
  1029.       ' ist noch eine Seite zu drucken ? Ja dann neues Blatt einlegen
  1030.       '
  1031.       IF zeiger%<bis%
  1032.         REPEAT
  1033.           ALERT 1,"Bitte ein neues Blatt |einlegen ",1," Okay | Abbruch",a|
  1034.         UNTIL GEMDOS(17) OR a|=2
  1035.         DEFMOUSE pfeil$
  1036.       ENDIF
  1037.     UNTIL zeiger%>bis% OR a|=2
  1038.   ELSE
  1039.     ALERT 1,"Machen Sie zuerst|Ihren Drucker bereit.",1," Return ",a%
  1040.   ENDIF
  1041.   CLOSE #4
  1042.   DEFMOUSE pfeil$
  1043. RETURN
  1044. > PROCEDURE fehlerabfanger
  1045.   LOCAL a|
  1046.   ALERT 3,"Ein programminterner Fehler|ist aufgetreten (Code: "+STR$(ERR)+")|Wollen Sie Ihren Text ab-|speichern ?",1," Nein | Ja ",a|
  1047.   IF a|=2
  1048.     IF anzahl_zeilen%>0
  1049.       PRINT CHR$(27)+"f";  ! Cursor ausschalten
  1050.       @cl_s
  1051.       BOX 157,29,482,53
  1052.       BOX 159,31,480,51
  1053.       TEXT 263,47,"Text speichern"
  1054.       @text_speichern_als
  1055.     ELSE
  1056.       ALERT 1,"Es ist noch kein Text für|eine Speicherung verfügbar !",1," Return ",a|
  1057.     ENDIF
  1058.   ENDIF
  1059.   ALERT 2,"Soll der Versuch gemacht|werden, mit dem Programm|fortzufahren ?",1," Nein | Ja ",a|
  1060.   IF a|=1
  1061.     END
  1062.   ELSE
  1063.     oberste%=0
  1064.     @ausgabe_ab_zeile(1)
  1065.     PRINT AT(1,3);
  1066.     ON ERROR GOSUB fehlerabfanger
  1067.     RESUME NEXT
  1068.   ENDIF
  1069.   DEFMOUSE pfeil$
  1070. RETURN
  1071. > PROCEDURE stoppen
  1072.   ALERT 1,"Na Na Na! Beendet man|denn SO ein programm?|Mit ESC-D-Q geht es doch|auch! SPEICHERN !!!",1," DUMP | Wieter | Raus ",a|
  1073.   IF a|=1
  1074.     DUMP "DUMP.DMP"
  1075.   ELSE IF a|=3
  1076.     ALERT 1,"Text noch Speichern?",1,"Ja|Nein",a|
  1077.     IF a|=1
  1078.       @text_speichern
  1079.     ENDIF
  1080.     EDIT
  1081.   ENDIF
  1082.   DEFMOUSE pfeil$
  1083. RETURN
  1084. > PROCEDURE divide_long_lines(anzahl%)
  1085.   WHILE LEN(zeile$(anzahl%))>zlen% AND anzahl%<max_zeilen%
  1086.     z$=zeile$(anzahl%)
  1087.     zeile$(anzahl%)=LEFT$(z$,zlen%)
  1088.     INC anzahl%
  1089.     zeile$(anzahl%)=MID$(z$,zlen%+1)
  1090.   WEND
  1091. RETURN
  1092. > PROCEDURE pfad_merken
  1093.   IF filename$<>""
  1094.     pfad$=filename$
  1095.     IF RIGHT$(pfad$)<>"\"
  1096.       FOR i%=LEN(filename$) DOWNTO 1
  1097.         pfad$=LEFT$(pfad$,LEN(pfad$)-1)
  1098.         EXIT IF RIGHT$(pfad$)="\"
  1099.       NEXT i%
  1100.       pfad$=pfad$+"*.TXT"
  1101.     ENDIF
  1102.   ENDIF
  1103. RETURN
  1104. > PROCEDURE statuszeile
  1105.   LOCAL p|,p1|,n$,ext$,zp|,sp|,raus!
  1106.   zp|=CRSLIN
  1107.   sp|=CRSCOL
  1108.   PRINT AT(1,1);"Name:________.___   I B   Links           Zeile:    1   Spalte: 1   Seite:    1"
  1109.   @tableiste
  1110.   PRINT CHR$(27)+"q";
  1111.   IF NOT (RIGHT$(filename$)="\" OR filename$="")
  1112.     filename$=UPPER$(filename$)
  1113.     raus!=FALSE
  1114.     p|=RINSTR(filename$,".")
  1115.     p1|=RINSTR(filename$,"\")
  1116.     n$=MID$(filename$,p1|+1,p|-(p1|+1))
  1117.     n$=n$+SPACE$(8-LEN(n$))
  1118.     ext$=RIGHT$(filename$,3)
  1119.   ENDIF
  1120.   PRINT AT(6,1);n$;AT(15,1);ext$
  1121.   IF block!
  1122.     PRINT AT(23,1);"B"
  1123.   ELSE
  1124.     PRINT AT(23,1);" "
  1125.   ENDIF
  1126.   @positionen
  1127.   PRINT AT(sp|,zp|);
  1128. RETURN
  1129. > PROCEDURE positionen
  1130.   LOCAL zp|,sp|,z$,s$,z%,s%,se%,altse$
  1131.   PRINT CHR$(27)+"q";
  1132.   IF block!
  1133.     wo%=(oberste%-2)+CRSLIN
  1134.     IF wo%>blockanfang% AND wo%<blockende%
  1135.       PRINT CHR$(27)+"p";
  1136.     ELSE
  1137.       PRINT CHR$(27)+"q";
  1138.     ENDIF
  1139.   ENDIF
  1140.   PRINT CHR$(27)+"f";
  1141.   zp|=CRSLIN
  1142.   sp|=CRSCOL
  1143.   altse$=se$
  1144.   s%=CRSCOL
  1145.   s$=STR$(s%,2)
  1146.   z%=oberste%-2+CRSLIN
  1147.   z$=STR$(z%,4)
  1148.   '
  1149.   ' seitengrenze Normal
  1150.   '
  1151.   '  IF z%>0
  1152.   IF seiten!(z%+1)=TRUE
  1153.     LINE 0,(zp|)*ch%-1,639,(zp|)*ch%-1
  1154.   ENDIF
  1155.   ' ENDIF
  1156.   se|=1+INT((z%-1)/seitelen%)
  1157.   se$=STR$(se|,4)
  1158.   PRINT AT(50,1);z$;AT(64,1);s$;AT(76,1);se$
  1159.   IF BIOS(11,-1)=16
  1160.     PRINT AT(25,1);"©"
  1161.   ELSE
  1162.     PRINT AT(25,1);" "
  1163.   ENDIF
  1164.   IF block!
  1165.     wo%=(oberste%-2)+CRSLIN
  1166.     IF wo%>blockanfang% AND wo%<blockende%
  1167.       PRINT CHR$(27)+"p";
  1168.     ELSE
  1169.       PRINT CHR$(27)+"q";
  1170.     ENDIF
  1171.   ENDIF
  1172.   PRINT CHR$(27);"e";
  1173.   PRINT AT(sp|,zp|);
  1174. RETURN
  1175. > PROCEDURE tableiste
  1176.   LOCAL sp|,zp|
  1177.   sp|=CRSCOL
  1178.   zp|=CRSLIN
  1179.   PRINT AT(1,2);CHR$(27);"K";
  1180.   PRINT AT(1,2);">"
  1181.   FOR i|=1 TO zlen%
  1182.     IF tabulator!(i|)
  1183.       PRINT AT(i|,2);"+";
  1184.     ELSE
  1185.       PRINT AT(i|,2);"-"
  1186.     ENDIF
  1187.   NEXT i|
  1188.   PRINT AT(zlen%+1,2);"<";
  1189.   PRINT AT(sp|,zp|);
  1190. RETURN
  1191. > PROCEDURE cl_s
  1192.   DEFFILL 0
  1193.   PBOX 0,30,639,382
  1194.   PRINT AT(1,3);
  1195. RETURN
  1196. > PROCEDURE page_up
  1197.   LOCAL sp|,zp|
  1198.   PRINT CHR$(27)+"f";
  1199.   IF oberste%>0
  1200.     zp|=CRSLIN
  1201.     sp|=CRSCOL
  1202.     IF oberste%<20
  1203.       oberste%=0
  1204.       @ausgabe_ab_zeile(1)
  1205.     ELSE
  1206.       SUB oberste%,20
  1207.       @ausgabe_ab_zeile(oberste%+1)
  1208.     ENDIF
  1209.     PRINT AT(sp|,zp|);
  1210.   ELSE
  1211.     PRINT AT(1,3);CHR$(7);  ! Fehlerglocke falls keine Seite mehr vorhanden
  1212.   ENDIF
  1213.   PRINT CHR$(27)+"e";
  1214. RETURN
  1215. > PROCEDURE page_down
  1216.   LOCAL sp|,zp|
  1217.   PRINT CHR$(27)+"f";
  1218.   IF oberste%<max_zeilen%-23
  1219.     zp|=CRSLIN
  1220.     sp|=CRSCOL
  1221.     IF oberste%>max_zeilen%-44
  1222.       oberste%=max_zeilen%-23
  1223.       @ausgabe_ab_zeile(oberste%+1)
  1224.     ELSE
  1225.       ADD oberste%,20
  1226.       @ausgabe_ab_zeile(oberste%+1)
  1227.     ENDIF
  1228.     PRINT AT(sp|,zp|);
  1229.   ELSE
  1230.     PRINT AT(1,3);CHR$(7); ! Fehlerglocke, falls keine Seite mehr vorhanden
  1231.   ENDIF
  1232.   PRINT CHR$(27)+"e";
  1233. RETURN
  1234. > PROCEDURE menueleiste
  1235.   PUT 0,384,men$
  1236. RETURN
  1237. > PROCEDURE mauslesen
  1238.   '
  1239.   ' Mouse-Daten in einen String umwandeln
  1240.   RESTORE mauspfeil
  1241.   LET pfeil$=MKI$(0)+MKI$(0)+MKI$(1)
  1242.   LET pfeil$=pfeil$+MKI$(0)+MKI$(1)
  1243.   FOR i|=1 TO 16
  1244.     READ hinten%
  1245.     LET pfeil$=pfeil$+MKI$(hinten%)
  1246.   NEXT i|
  1247.   FOR i|=1 TO 16
  1248.     READ vorn%
  1249.     LET pfeil$=pfeil$+MKI$(vorn%)
  1250.   NEXT i|
  1251. mauspfeil:
  1252.   DATA 61440,39936,34560,49600,16496,24604,8196,12412,4128,6416,2440,3399,1312,1809,18,20
  1253.   DATA 32768,24576,30720,15872,16256,8160,8184,3968,4032,1760,1648,568,543,14,12,8
  1254.   '  DEFMOUSE pfeil$
  1255.   '
  1256.   '  Daten für Sprite : CRS$(2,1)
  1257.   '
  1258.   crs1$=MKI$(8)+MKI$(8)+MKI$(0)+MKI$(0)+MKI$(1)
  1259.   FOR i|=1 TO 16
  1260.     crs1$=crs1$+MKI$(0)
  1261.   NEXT i|
  1262.   FOR i|=1 TO 16
  1263.     READ s%
  1264.     crs1$=crs1$+MKI$(s%)
  1265.   NEXT i|
  1266.   DATA 32766,32766,24582,24582
  1267.   DATA 24582,24582,24582,24582
  1268.   DATA 24582,24582,24582,24582
  1269.   DATA 24582,24582,32766,32766
  1270.   SWAP pfeil$,crs1$
  1271.   DEFMOUSE pfeil$
  1272.   '
  1273. RETURN
  1274. > PROCEDURE anfang
  1275.   DEFFILL 1,2,4
  1276.   PBOX 0,0,639,399
  1277.   DEFFILL 0
  1278.   PBOX 99,48,501,351
  1279.   GRAPHMODE 3
  1280.   DEFFILL 1,2,8
  1281.   PBOX 100,49,500,350
  1282.   DEFTEXT 1,1,0,32
  1283.   TEXT 120,90,350,"ISE-Software"
  1284.   DEFTEXT 1,4,0,6
  1285.   TEXT 120,100,350,"Intelligent - Exclusive - Sinnvoll"
  1286.   TEXT 120,120,350,"K-H Wallon               C.Hörner"
  1287.   TEXT 120,130,350,"06424/4504               05605/4319"
  1288.   DEFTEXT 1,0,0,13
  1289.   TEXT 210,150,200,"presentiert"
  1290.   DEFTEXT 1,5,0,13
  1291.   TEXT 150,170,300,"TEXTWRITER ST V 2.4"
  1292.   DEFTEXT 1,0,0,6
  1293.   TEXT 200,190,"1989 - Public Domain - 1989"
  1294.   TEXT 120,205,"verbessert von:                Grundprg: TED"
  1295.   TEXT 120,220,"  K-H Wallon                   aus dem Buch"
  1296.   TEXT 120,230,"  Leidenhofenerstraße 25       GFA-Basic -"
  1297.   TEXT 120,240,"  3557 Ebsdorfergrund 6        Programmierung"
  1298.   TEXT 120,250,"  Tel.0 64 24/45 04            von G.P. Engels"
  1299.   DRAW 120,260 TO 220,260 TO 170,340 TO 120,260
  1300.   DRAW 380,260 TO 480,260 TO 430,340 TO 380,260
  1301.   DEFTEXT 1,0,0,32
  1302.   TEXT 150,290,"I"
  1303.   TEXT 410,290,"I"
  1304.   TEXT 180,290,"E"
  1305.   TEXT 440,290,"E"
  1306.   TEXT 165,320,"S"
  1307.   TEXT 425,320,"S"
  1308.   PAUSE 10
  1309.   GRAPHMODE 1
  1310.   DO
  1311.     GET 100,50,500,51,t$
  1312.     RC_COPY XBIOS(3),100,51,400,298 TO XBIOS(3),100,50
  1313.     PUT 100,348,t$
  1314.     EXIT IF INKEY$<>""
  1315.   LOOP
  1316.   CLR t$
  1317.   DEFTEXT 1,0,0,13
  1318. RETURN
  1319. > PROCEDURE zeilenlaenge
  1320.   LOCAL bild_oben$,zl$,flg!,sp|,zp|,a|
  1321.   PRINT CHR$(27)+"f";
  1322.   GET 0,0,639,15,bild_oben$
  1323.   nr%=oberste%-2+CRSLIN
  1324.   zp|=CRSLIN
  1325.   sp|=CRSCOL
  1326.   PRINT AT(1,1);SPACE$(zlen%);
  1327. zlen_nochmal:
  1328.   PRINT AT(1,1);"Neue Zeilenlänge : "
  1329.   PRINT AT(20,1);
  1330.   FORM INPUT 5 AS zl$
  1331.   IF VAL(zl$)>79
  1332.     ALERT 3,"Dies Maximale Zeilenlänge|liegt bei 80 Zeichen!",1,"Return",a|
  1333.     GOTO zlen_nochmal
  1334.   ELSE
  1335.     IF VAL(zl$)<zlen%
  1336.       zlen%=VAL(zl$)
  1337.       @textformat(1,anzahl_zeilen%)
  1338.     ENDIF
  1339.     zlen%=VAL(zl$)
  1340.     @tableiste
  1341.     @cl_s
  1342.     @ausgabe_ab_zeile(nr%)
  1343.   ENDIF
  1344.   PUT 0,0,bild_oben$
  1345.   PRINT CHR$(27)+"e";
  1346.   CLR bild_oben$
  1347.   CLR zl$
  1348.   DEFMOUSE pfeil$
  1349. RETURN
  1350. ' ---------------------------------------------------------------------------
  1351. ' Menüeinbau
  1352. ' ---------------------------------------------------------------------------
  1353. > PROCEDURE rsc_load
  1354.   LOCAL rsc$,gef!
  1355.   CLR rsc$
  1356.   ~RSRC_FREE()
  1357.   PRINT AT(1,1);" Moment : Ich lade das RSC-File 'TEXTWRIT.RSC' in den Speicher ! Bitte Geduld ! ";
  1358. rsc_nochmal:
  1359.   IF EXIST("TEXTWRIT.RSC")
  1360.     rsc$="TEXTWRIT.RSC"
  1361.   ELSE IF EXIST("TEXTEDIT\TEXTWRIT.RSC")
  1362.     rsc$="TEXTEDIT\TEXTWRIT.RSC"
  1363.   ELSE IF rsc$=""
  1364.     ALERT 3,"Das RSC-Files TEXTWRIT.RSC|habe ich nicht gefunden!|Bitte den Namen wählen:",1," Okay ",a|
  1365.     FILESELECT "\*.RSC",rsc$,rsc$
  1366.     IF RIGHT$(rsc$,3)<>"RSC"
  1367.       ALERT 3,"Dies ist kein richtiges|RSC-File",1,"Return",a|
  1368.       GOTO rsc_nochmal
  1369.     ENDIF
  1370.   ENDIF
  1371.   gef!=RSRC_LOAD(rsc$)
  1372.   IF NOT gef!
  1373.     ALERT 2," Was war denn das ?|Ich habe das File nicht|richtig geladen!|Name FALSCH ???",1,"Nochmal|Abbruch",a|
  1374.     IF a|=1
  1375.       GOTO rsc_nochmal
  1376.     ELSE
  1377.       EDIT
  1378.     ENDIF
  1379.   ENDIF
  1380.   ~RSRC_GADDR(0,disk&,r_disk%)
  1381.   ~RSRC_GADDR(0,block&,r_block%)
  1382.   ~RSRC_GADDR(0,arbeit&,r_arbeit%)
  1383.   ~RSRC_GADDR(0,scroll&,r_scroll%)
  1384.   ~RSRC_GADDR(0,einstell&,r_einstell%)
  1385.   ~RSRC_GADDR(0,textattr&,r_textattr%)
  1386.   ~RSRC_GADDR(0,hinlade&,r_hinlade%)
  1387.   ~RSRC_GADDR(0,hinsave&,r_hinsave%)
  1388.   ~RSRC_GADDR(0,hinende&,r_hinende%)
  1389.   ~RSRC_GADDR(0,loeschen&,r_loeschen%)
  1390.   ~RSRC_GADDR(0,dformat&,r_dformat%)
  1391.   ~RSRC_GADDR(0,hindruck&,r_hindruck%)
  1392.   ~RSRC_GADDR(0,bild&,r_bild%)
  1393.   ~RSRC_GADDR(0,ordner&,r_ordner%)
  1394.   ~RSRC_GADDR(0,laufwerk&,r_laufwerk%)
  1395.   ~RSRC_GADDR(0,suchetex&,r_suchetex%)
  1396.   ~RSRC_GADDR(0,erstext&,r_erstext%)
  1397.   ~RSRC_GADDR(0,textform&,r_textform%)
  1398.   ~RSRC_GADDR(0,seitefrm&,r_seitenform%)
  1399.   DEFMOUSE pfeil$
  1400. RETURN
  1401. > PROCEDURE rsc_init
  1402.   LET disk&=0 !RSC_TREE
  1403.   LET block&=1 !RSC_TREE
  1404.   LET arbeit&=2 !RSC_TREE
  1405.   LET scroll&=3 !RSC_TREE
  1406.   LET einstell&=4 !RSC_TREE
  1407.   LET textattr&=5 !RSC_TREE
  1408.   LET hinlade&=6 !RSC_TREE
  1409.   LET hinsave&=7 !RSC_TREE
  1410.   LET hinende&=8 !RSC_TREE
  1411.   LET loeschen&=9 !RSC_TREE
  1412.   LET dformat&=10 !RSC_TREE
  1413.   LET hindruck&=11 !RSC_TREE
  1414.   LET bild&=12 !RSC_TREE
  1415.   LET ordner&=13 !RSC_TREE
  1416.   LET laufwerk&=14 !RSC_TREE
  1417.   LET suchetex&=15 !RSC_TREE
  1418.   LET erstext&=16 !RSC_TREE
  1419.   LET textform&=17 !RSC_TREE
  1420.   LET seitefrm&=18 !RSC_TREE
  1421.   LET tladen&=2 !Obj in #0
  1422.   LET tsave&=3 !Obj in #0
  1423.   LET tsaveas&=4 !Obj in #0
  1424.   LET tdruck&=5 !Obj in #0
  1425.   LET neuord&=7 !Obj in #0
  1426.   LET fileweg&=8 !Obj in #0
  1427.   LET formdisk&=9 !Obj in #0
  1428.   LET laufwech&=10 !Obj in #0
  1429.   LET nameaend&=11 !Obj in #0
  1430.   LET prgende&=13 !Obj in #0
  1431.   LET banf&=2 !Obj in #1
  1432.   LET bende&=3 !Obj in #1
  1433.   LET bladen&=5 !Obj in #1
  1434.   LET bsave&=6 !Obj in #1
  1435.   LET bkopy&=8 !Obj in #1
  1436.   LET bver&=9 !Obj in #1
  1437.   LET bloesh&=10 !Obj in #1
  1438.   LET bdruck&=11 !Obj in #1
  1439.   LET bmark&=12
  1440.   LET insert&=2 !Obj in #2
  1441.   LET owert&=3 !Obj in #2
  1442.   LET zeinf&=5 !Obj in #2
  1443.   LET zloesch&=6 !Obj in #2
  1444.   LET ztrenn&=7 !Obj in #2
  1445.   LET zjoin&=8 !Obj in #2
  1446.   LET suche&=10 !Obj in #2
  1447.   LET ersetze&=11 !Obj in #2
  1448.   LET nochmal&=12 !Obj in #2
  1449.   LET texform&=13 !Obj in #2
  1450.   LET setmar1&=15 !Obj in #2
  1451.   LET gomar1&=16 !Obj in #2
  1452.   LET setmar2&=17 !Obj in #2
  1453.   LET gomar2&=18 !Obj in #2
  1454.   LET setmar3&=19 !Obj in #2
  1455.   LET gomar3&=20 !Obj in #2
  1456.   LET shoch&=2 !Obj in #3
  1457.   LET srunter&=3 !Obj in #3
  1458.   LET srechts&=4 !Obj in #3
  1459.   LET slinks&=5 !Obj in #3
  1460.   LET zhoch&=6 !Obj in #3
  1461.   LET zrunter&=7 !Obj in #3
  1462.   LET seianf&=8 !Obj in #3
  1463.   LET tanf&=9 !Obj in #3
  1464.   LET tende&=10 !Obj in #3
  1465.   LET seiform&=2 !Obj in #4
  1466.   LET zeiform&=3 !Obj in #4
  1467.   LET drkform&=4 !Obj in #4
  1468.   LET drkanp&=5 !Obj in #4
  1469.   LET ascmod&=6 !Obj in #4
  1470.   LET twmod&=7 !Obj in #4
  1471.   LET frei&=8 !Obj in #4
  1472.   LET trennan&=11 !Obj in #4
  1473.   LET trennaus&=12 !Obj in #4
  1474.   LET tgestalt&=13 !Obj in #4
  1475.   LET atrlinks&=2 !Obj in #5
  1476.   LET atrrecht&=3 !Obj in #5
  1477.   LET atrzentr&=4 !Obj in #5
  1478.   LET atrblock&=5 !Obj in #5
  1479.   LET sfett&=7 !Obj in #5
  1480.   LET sunter&=8 !Obj in #5
  1481.   LET skursiv&=9 !Obj in #5
  1482.   LET shell&=10 !Obj in #5
  1483.   LET sscript&=11 !Obj in #5
  1484.   LET ssup&=12 !Obj in #5
  1485.   LET endeja&=8 !Obj in #8
  1486.   LET endenein&=9 !Obj in #8
  1487.   LET mendisk&=2 !Obj in #12
  1488.   LET menblock&=3 !Obj in #12
  1489.   LET menarbei&=4 !Obj in #12
  1490.   LET menscrol&=5 !Obj in #12
  1491.   LET menattr&=6 !Obj in #12
  1492.   LET accs&=7 !Obj in #12
  1493.   LET meneinst&=8 !Obj in #12
  1494.   LET edordner&=3 !Obj in #13
  1495.   LET ordokay&=4 !Obj in #13
  1496.   LET ordabbr&=5 !Obj in #13
  1497.   LET sutext&=3 !Obj in #15
  1498.   LET suabbr&=5 !Obj in #15
  1499.   LET suokay&=6 !Obj in #15
  1500.   LET ersutext&=3 !Obj in #16
  1501.   LET erertext&=5 !Obj in #16
  1502.   LET ersokay&=7 !Obj in #16
  1503.   LET ersabbr&=8 !Obj in #16
  1504.   LET zformat&=7 !Obj in #17
  1505.   LET aformat&=8 !Obj in #17
  1506.   LET tformat&=9 !Obj in #17
  1507.   LET sfrmpl&=4 !Obj in #18
  1508.   LET sfrmak&=5 !Obj in #18
  1509.   LET sfrmao&=6 !Obj in #18
  1510.   LET sfrmau&=7 !Obj in #18
  1511.   LET sfrmaf&=8 !Obj in #18
  1512.   LET sfrmdrl&=10 !Obj in #18
  1513.   LET sfrmkol&=12 !Obj in #18
  1514.   LET sfrmkom&=13 !Obj in #18
  1515.   LET sfrmkor&=14 !Obj in #18
  1516.   LET sfrmful&=15 !Obj in #18
  1517.   LET sfrmfum&=16 !Obj in #18
  1518.   LET sfrmfur&=17 !Obj in #18
  1519.   LET sfrmtab&=19 !Obj in #18
  1520.   LET sfrmlr&=20 !Obj in #18
  1521.   LET sfrmrr&=21 !Obj in #18
  1522.   LET sfrmok&=23 !Obj in #18
  1523.   LET sfrmabbr&=24 !Obj in #18
  1524. RETURN
  1525. '
  1526. > PROCEDURE menue(f!)
  1527.   LOCAL sp|,zp|,p|,t$,wahl%
  1528.   sp|=CRSCOL
  1529.   zp|=CRSLIN
  1530.   IF NOT f!
  1531.     TEXT 1,13,"ESC?"
  1532.     REPEAT
  1533.       t$=INKEY$
  1534.     UNTIL t$<>""
  1535.     IF LEN(t$)=2
  1536.       code|=(ASC(RIGHT$(t$)))-58
  1537.       IF code|>=1 AND code|<=10
  1538.         IF sp|+LEN(phr$(code|))<zlen%
  1539.           zeile$(oberste%-2+zp|)=LEFT$(zeile$(oberste%-2+zp|),sp|)+phr$(code|)
  1540.           PRINT AT(sp|,zp|);phr$(code|);CHR$(27)+"e";
  1541.         ELSE
  1542.           ALERT 3,"Der Text der auf dieser|Taste liegt passt nicht mehr|in die Zeile !",1,"Return",a|
  1543.           DEFMOUSE pfeil$
  1544.         ENDIF
  1545.       ENDIF
  1546.     ENDIF
  1547.     TEXT 1,13,"Name"
  1548.     p|=INSTR(menstr$,t$)
  1549.     IF p|
  1550.       ON p| GOSUB hpdisk,hpblock,hparbeit,hpscroll,hpattribute,hpaccs,hpeinstell,hpdisk,hpblock,hparbeit,hpscroll,hpattribute,hpaccs,hpeinstell
  1551.     ENDIF
  1552.     CLR t$
  1553.   ELSE
  1554.     '
  1555.     ' Mausklick -> dann auf Menüklick reagieren
  1556.     '
  1557.     wahl%=OBJC_FIND(r_bild%,0,7,MOUSEX,MOUSEY)
  1558.     IF wahl%>=mendisk& AND wahl%<=meneinst&
  1559.       ON wahl%-1 GOSUB hpdisk,hpblock,hparbeit,hpscroll,hpattribute,hpaccs,hpeinstell
  1560.       wahl%=0
  1561.     ENDIF
  1562.   ENDIF
  1563. RETURN
  1564. ' ----------------------------------------------------------------------------
  1565. ' Hauptprogramm Disk
  1566. ' ----------------------------------------------------------------------------
  1567. > PROCEDURE hpdisk
  1568.   LOCAL mx&,my&,mk|,x&,y&,b&,h&,t$,p|,temp$
  1569.   ~FORM_CENTER(r_disk%,x&,y&,b&,h&)
  1570.   GET x&,y&,x&+b&,y&+h&,temp$
  1571.   ~OBJC_DRAW(r_disk%,0,7,0,0,640,400)
  1572.   REPEAT
  1573.     t$=INKEY$
  1574.     MOUSE mx&,my&,mk|
  1575.   UNTIL t$<>"" OR mk|=1
  1576.   IF mk|=1
  1577.     w%=OBJC_FIND(r_disk%,0,7,mx&,my&)
  1578.     IF w%>=tladen& AND w%<=prgende&
  1579.       t$=MID$(diskstr$,w%-1,1)
  1580.     ENDIF
  1581.   ENDIF
  1582.   PUT x&,y&,temp$
  1583.   SELECT t$
  1584.   CASE "l","L"
  1585.     @text_laden
  1586.   CASE "s","S"
  1587.     @text_speichern
  1588.   CASE "a","A"
  1589.     @text_speichern_als
  1590.   CASE "p","P"
  1591.     @text_drucken
  1592.   CASE "o","O"
  1593.     @neuer_ordner
  1594.   CASE "f","F"
  1595.     @file_weg
  1596.   CASE "n","N"
  1597.     @name_aendern
  1598.   CASE "d","D"
  1599.     @disk_format
  1600.   CASE "w","W"
  1601.     @laufwerk_wechseln
  1602.   CASE "x","X"
  1603.     @text_loeschen
  1604.   CASE "q","Q"
  1605.     @prg_ende
  1606.   ENDSELECT
  1607. RETURN
  1608. > PROCEDURE text_laden
  1609.   LOCAL x&,y&,b&,h&,temp$,a|,laenge%,id$,anf%,posit%,rest%,durchgaenge%,tabul$,parameter|
  1610.   LOCAL ladestring$,anz%,p&,wo%
  1611.   IF anzahl_zeilen%>0
  1612.     ALERT 3,"Warnung! Das Laden eines neuen|Textes löscht den alten Text.|Wollen Sie das ?",1," Ja | Nein ",a|
  1613.     DEFMOUSE pfeil$
  1614.   ELSE
  1615.     a|=1
  1616.   ENDIF
  1617.   IF a|=1
  1618.     FOR i%=1 TO anzahl_zeilen%
  1619.       zeile$(i%)=""
  1620.     NEXT i%
  1621.     oberste%=0
  1622.     anzahl_zeilen%=0
  1623.     block!=FALSE
  1624.     blockanfang%=0
  1625.     blockende%=0
  1626.     ARRAYFILL seiten!(),FALSE
  1627.     PRINT CHR$(27)+"f"; ! Cursor ausschalten
  1628.     @cl_s
  1629.     @head(157,20,472,"Text Laden")
  1630.     FILESELECT pfad$,"",filename$
  1631.     @pfad_merken
  1632.     IF NOT (RIGHT$(filename$)="\" OR filename$="")
  1633.       ~FORM_CENTER(r_hinlade%,x&,y&,b&,h&)
  1634.       GET x&,y&,x&+b&,y&+h&,temp$
  1635.       ~OBJC_DRAW(r_hinlade%,0,7,0,0,640,400)
  1636.       OPEN "I",#1,filename$
  1637.       laenge%=LOF(#1)
  1638.       anf%=LOC(#1)            ! Startadresse des Textes auf Disk
  1639.       INPUT #1,id$
  1640.       IF id$<>"TEXTWRITER ST"
  1641.         ALERT 1,"Keine TEXTWRITER-Text soll im|Word Plus Modus geladen|werden oder normal ?",1,"Normal|  WP  ",a|
  1642.         DEFMOUSE pfeil$
  1643.         SEEK #1,anf%          ! Wenn kein TEXTWRITER-TEXT dann
  1644.         '                     ! an den Anfang des Springen und alles Laden
  1645.       ELSE
  1646.         INPUT #1,zlen%
  1647.         INPUT #1,papierlen%
  1648.         INPUT #1,seitelen%
  1649.         INPUT #1,lrand%
  1650.         INPUT #1,rrand%
  1651.         INPUT #1,aboben%
  1652.         INPUT #1,abunten%
  1653.         INPUT #1,kopfob%
  1654.         INPUT #1,fuss%
  1655.         INPUT #1,tabulator%
  1656.         INPUT #1,kopfl$
  1657.         INPUT #1,kopfm$
  1658.         INPUT #1,kopfr$
  1659.         INPUT #1,fussl$
  1660.         INPUT #1,fussm$
  1661.         INPUT #1,fussr$
  1662.         INPUT #1,tabul$
  1663.         INPUT #1,parameter|
  1664.         FOR i|=1 TO zlen%
  1665.           IF MID$(tabul$,i|,1)="1"
  1666.             tabulator!(i|)=TRUE
  1667.           ELSE
  1668.             tabulator!(i|)=FALSE
  1669.           ENDIF
  1670.         NEXT i|
  1671.         FOR i|=1 TO 7
  1672.           IF BTST(parameter|,i|)
  1673.             par!(i|)=TRUE
  1674.           ELSE
  1675.             par!(i|)=FALSE
  1676.           ENDIF
  1677.         NEXT i|
  1678.         posit%=LOC(#1)
  1679.         laenge%=laenge%-(posit%-anf%)
  1680.       ENDIF
  1681.       OPTION BASE 0
  1682.       FOR i%=0 TO max_zeilen%-1 STEP seitelen%
  1683.         seiten!(i%)=TRUE
  1684.       NEXT i%
  1685.       FOR i|=0 TO seitelen%-1
  1686.         seiten!(i|)=FALSE
  1687.       NEXT i|
  1688.       OPTION BASE 1
  1689.       durchgaenge%=INT(laenge%/256)
  1690.       rest%=laenge% MOD 256
  1691.       ladestring$=""
  1692.       anz%=0
  1693.       i%=0
  1694.       IF durchgaenge%>0
  1695.         REPEAT
  1696.           INC i%
  1697.           durchgang$=INPUT$(256,#1)     ! Hier werden die Bytes gelesen.
  1698.           IF a|=2
  1699.             REPEAT
  1700.               p&=INSTR(p&,durchgang$,CHR$(&H1E))
  1701.               IF p&
  1702.                 MID$(durchgang$,p&,1)=CHR$(32)
  1703.                 INC p&
  1704.               ENDIF
  1705.             UNTIL p&=0
  1706.           ENDIF
  1707.           ladestring$=ladestring$+durchgang$
  1708.           wo%=INSTR(ladestring$,CHR$(10))
  1709.           WHILE wo%>0 AND anz%<max_zeilen%
  1710.             INC anz%
  1711.             zeile$(anz%)=LEFT$(ladestring$,wo%-2)   ! vor  dem CR
  1712.             IF LEN(zeile$(anz%))>zlen%
  1713.               @divide_long_lines(anz%)
  1714.             ENDIF
  1715.             ladestring$=MID$(ladestring$,wo%+1)     ! nach dem LF
  1716.             wo%=INSTR(ladestring$,CHR$(10))
  1717.           WEND
  1718.         UNTIL i%=durchgaenge% OR anz%>=max_zeilen%
  1719.       ENDIF
  1720.       IF rest%>0 AND anz%<max_zeilen%
  1721.         rest$=INPUT$(rest%,#1)
  1722.         ladestring$=ladestring$+rest$
  1723.         wo%=INSTR(ladestring$,CHR$(10))
  1724.         WHILE wo%>0 AND anz%<max_zeilen%
  1725.           INC anz%
  1726.           zeile$(anz%)=LEFT$(ladestring$,wo%-2)   ! vor  dem CR
  1727.           IF LEN(zeile$(anz%))>zlen%
  1728.             @divide_long_lines(anz%)
  1729.           ENDIF
  1730.           ladestring$=MID$(ladestring$,wo%+1)     ! nach dem LF
  1731.           wo%=INSTR(ladestring$,CHR$(10))
  1732.         WEND
  1733.       ENDIF
  1734.       IF LEN(ladestring$)>0 AND anz%<max_zeilen%
  1735.         INC anz%
  1736.         zeile$(anz%)=ladestring$
  1737.         IF LEN(zeile$(anz%))>zlen%
  1738.           @divide_long_lines(anz%)
  1739.         ENDIF
  1740.       ENDIF
  1741.       IF anz%=max_zeilen%
  1742.         ALERT 1,"Diese Datei ist zu groß, um|vollständig geladen zu werden.",1," Return ",a%
  1743.         DEFMOUSE pfeil$
  1744.         anzahl_zeilen%=max_zeilen%-1
  1745.       ELSE
  1746.         anzahl_zeilen%=anz%
  1747.       ENDIF
  1748.       CLOSE #1
  1749.       PUT x&,y&,temp$
  1750.     ENDIF
  1751.     oberste%=0
  1752.     block!=FALSE
  1753.     blockanfang%=0
  1754.     blockende%=0
  1755.   ENDIF    ! von Ok ohne Filename oder Abbruch
  1756.   @tableiste
  1757.   DEFMOUSE pfeil$
  1758.   @cl_s
  1759.   PRINT CHR$(27)+"e"  ! Cursor einschalten
  1760.   @ausgabe_ab_zeile(1)
  1761.   @statuszeile
  1762.   PRINT AT(1,3);
  1763. RETURN
  1764. > PROCEDURE text_speichern
  1765.   LOCAL x&,y&,b&,h&,temp$,sp|,zp|
  1766.   IF anzahl_zeilen%>0
  1767.     zp|=CRSLIN
  1768.     sp|=CRSCOL
  1769.     PRINT CHR$(27)+"f";  ! Cursor ausschalten
  1770.     ~FORM_CENTER(r_hinsave%,x&,y&,b&,h&)
  1771.     GET x&,y&,x&+b&,y&+h&,temp$
  1772.     ~OBJC_DRAW(r_hinsave%,0,7,0,0,640,400)
  1773.     IF LEN(filename$)>1 AND RIGHT$(filename$,12)<>"TESTTEXT.TXT"
  1774.       OPEN "O",#1,filename$
  1775.       IF tw!=TRUE
  1776.         PRINT #1,"TEXTWRITER ST"
  1777.         PRINT #1,zlen%
  1778.         PRINT #1,papierlen%
  1779.         PRINT #1,seitelen%
  1780.         PRINT #1,lrand%
  1781.         PRINT #1,rrand%
  1782.         PRINT #1,aboben%
  1783.         PRINT #1,abunten%
  1784.         PRINT #1,kopfob%
  1785.         PRINT #1,fuss%
  1786.         PRINT #1,tabulator%
  1787.         PRINT #1,kopfl$
  1788.         PRINT #1,kopfm$
  1789.         PRINT #1,kopfr$
  1790.         PRINT #1,fussl$
  1791.         PRINT #1,fussm$
  1792.         PRINT #1,fussr$
  1793.         FOR i|=1 TO zlen%
  1794.           IF tabulator!(i|)
  1795.             tabul$=tabul$+"1"
  1796.           ELSE
  1797.             tabul$=tabul$+"0"
  1798.           ENDIF
  1799.         NEXT i|
  1800.         PRINT #1,tabul$
  1801.         FOR i|=1 TO 7
  1802.           IF par!(i|)
  1803.             parameter|=BSET(parameter|,i|)
  1804.           ELSE
  1805.             parameter|=BCLR(parameter|,i|)
  1806.           ENDIF
  1807.         NEXT i|
  1808.         PRINT #1,parameter|
  1809.       ENDIF
  1810.       FOR i%=1 TO anzahl_zeilen%
  1811.         IF asc!
  1812.           IF RIGHT$(zeile$(i%))=CHR$(174)
  1813.             zeile$(i%)=LEFT$(zeile$(i%),LEN(zeile$(i%))-1)
  1814.           ENDIF
  1815.         ENDIF
  1816.         PRINT #1,zeile$(i%)
  1817.       NEXT i%
  1818.       CLOSE #1
  1819.     ELSE
  1820.       ALERT 1,"Ich habe keinen Filenamen|TESTTEXT.TXT ist doch blöd!|Bitte mit ESC-D-A speichern!",1," Return ",a|
  1821.     ENDIF
  1822.     PUT x&,y&,temp$
  1823.     @cl_s
  1824.     PRINT CHR$(27)+"e"   ! Cursor einschalten
  1825.     @ausgabe_ab_zeile(oberste%+1)
  1826.     PRINT AT(sp|,zp|);
  1827.     @statuszeile
  1828.   ELSE
  1829.     ALERT 1,"Es ist noch kein Text für|eine Speicherung verfügbar !",1," Return ",a%
  1830.   ENDIF
  1831.   DEFMOUSE pfeil$
  1832. RETURN
  1833. > PROCEDURE text_speichern_als
  1834.   LOCAL x&,y&,b&,h&,temp$,sp|,zp|
  1835.   IF anzahl_zeilen%>0
  1836.     zp|=CRSLIN
  1837.     sp|=CRSCOL
  1838.     PRINT CHR$(27)+"f";  ! Cursor ausschalten
  1839.     @cl_s
  1840.     @head(157,20,472,"Text Speichern")
  1841.     FILESELECT pfad$,filename$,filename$
  1842.     @pfad_merken
  1843.     IF NOT (RIGHT$(filename$)="\" OR filename$="")
  1844.       @text_speichern
  1845.     ENDIF
  1846.   ELSE
  1847.     ALERT 1,"Es ist noch kein Text für|eine Speicherung verfügbar !",1," Return ",a%
  1848.   ENDIF
  1849.   DEFMOUSE pfeil$
  1850. RETURN
  1851. > PROCEDURE text_drucken
  1852.   LOCAL x&,y&,b&,h&,temp$
  1853.   IF anzahl_zeilen%>0
  1854.     ALERT 2,"Wollen Sie den aktuellen|Text ausdrucken ?",1," Ja | Nein ",a%
  1855.     DEFMOUSE pfeil$
  1856.     IF a%=1
  1857.       ~FORM_CENTER(r_hindruck%,x&,y&,b&,h&)
  1858.       GET x&,y&,x&+b&,y&+h&,temp$
  1859.       ~OBJC_DRAW(r_hindruck%,0,7,0,0,640,400)
  1860.       TEXT 225,224,"1"
  1861.       @drucken(1,anzahl_zeilen%)
  1862.       PUT x&,y&,temp$
  1863.     ENDIF
  1864.   ENDIF
  1865. RETURN
  1866. > PROCEDURE text_loeschen
  1867.   IF anzahl_zeilen%>0
  1868.     ALERT 3,"Wollen Sie den aktuellen|Text wirklich löschen ?",1," Ja | Nein ",a|
  1869.     IF a|=1
  1870.       PRINT CHR$(27)+"f";
  1871.       ERASE zeile$()
  1872.       DIM zeile$(max_zeilen%)
  1873.       oberste%=0
  1874.       anzahl_zeilen%=0
  1875.       block!=FALSE
  1876.       blockanfang%=0
  1877.       blockende%=0
  1878.       filename$="TESTTEXT.TXT"
  1879.       zlen%=79
  1880.       papierlen%=66
  1881.       seitelen%=58
  1882.       lrand%=1
  1883.       aboben%=3
  1884.       tabulator%=5
  1885.       ARRAYFILL tabulator!(),FALSE
  1886.       FOR i|=1 TO zlen% STEP tabulator%
  1887.         tabulator!(i|)=TRUE
  1888.       NEXT i|
  1889.       tabulator!(1)=FALSE
  1890.       @cl_s
  1891.       @statuszeile
  1892.     ENDIF
  1893.   ENDIF
  1894.   DEFMOUSE pfeil$
  1895. RETURN
  1896. > PROCEDURE neuer_ordner
  1897.   LOCAL x&,y&,b&,h&,temp$,exit%,p|,ph$,ordner$
  1898.   FILESELECT "\*.*",ph$,ph$
  1899.   IF ph$<>"" AND LEN(ph$)>1
  1900.     ALERT 3,"Nur der Pathname zählt!|Der Dateiname wird vergessen!",1," Okay ",a|
  1901.     DEFMOUSE pfeil$
  1902.     p|=RINSTR(ph$,"\")
  1903.     ph$=LEFT$(ph$,p|)
  1904.   ENDIF
  1905.   CHAR{{OB_SPEC(r_ordner%,edordner&)}}=ordner$
  1906.   ~FORM_CENTER(r_ordner%,x&,y&,b&,h&)
  1907.   GET x&,y&,x&+b&,y&+h&,temp$
  1908.   ~OBJC_DRAW(r_ordner%,0,7,0,0,640,400)
  1909.   exit%=FORM_DO(r_ordner%,edordner&)
  1910.   ~OBJC_CHANGE(r_ordner%,exit%,0,x&,y&,b&,h&,0,0)
  1911.   ordner$=CHAR{{OB_SPEC(r_ordner%,edordner&)}}
  1912.   PUT x&,y&,temp$
  1913.   IF exit%=ordokay&
  1914.     ALERT 1,"Der Ordner :"+ordner$+"|im Phat :"+ph$+"|wird angelegt !|Bitte warten!",1," Okay | Abbruch ",a|
  1915.     DEFMOUSE pfeil$
  1916.     IF a|=1
  1917.       MKDIR ph$+ordner$
  1918.     ENDIF
  1919.   ENDIF
  1920. RETURN
  1921. > PROCEDURE file_weg
  1922.   LOCAL x&,y&,b&,h&,temp$,exit%,ph$,ordner$
  1923.   FILESELECT "\*.*",ph$,ph$
  1924.   IF ph$<>"" AND LEN(ph$)>1
  1925.     ALERT 3,"Soll das File :|"+ph$+"|wirklich gelöscht werden ?",2," Ja | Nein ",a|
  1926.     DEFMOUSE pfeil$
  1927.     IF a|=1
  1928.       ~FORM_CENTER(r_loeschen%,x&,y&,b&,h&)
  1929.       GET x&,y&,x&+b&,y&+h&,temp$
  1930.       ~OBJC_DRAW(r_loeschen%,0,7,0,0,640,400)
  1931.       KILL ph$
  1932.       PUT x&,y&,temp$
  1933.     ENDIF
  1934.   ENDIF
  1935. RETURN
  1936. > PROCEDURE disk_format
  1937.   LOCAL x&,y&,b&,h&,sp|,zp|,nr%,temp$,la|
  1938.   sp|=CRSCOL
  1939.   zp|=CRSLIN
  1940.   nr%=oberste%-2+CRSLIN
  1941.   PRINT CHR$(27)+"f";
  1942.   ALERT 2,"Welches Laufwerk möchtest|du Formatieren ?",1,"  A  |  B  | Keins",la|
  1943.   DEFMOUSE pfeil$
  1944.   IF la|<3
  1945.     okay!=FALSE
  1946.     ~FORM_CENTER(r_dformat%,x&,y&,b&,h&)
  1947.     ~OBJC_DRAW(r_dformat%,0,7,0,0,640,400)
  1948.     REPEAT
  1949.       t$=INKEY$
  1950.       IF UPPER$(t$)="E"
  1951.         seiten|=1
  1952.         med|=248
  1953.         ALERT 3,"Formatieren löscht alle Daten auf|der Diskette rettungslos!| Wirklich Formatieren ?",2," Ja | Nein ",a|
  1954.         DEFMOUSE pfeil$
  1955.         IF a|=1
  1956.           @up.format(1,seiten|,80,9,5,112,med|)
  1957.           okay!=TRUE
  1958.         ENDIF
  1959.       ELSE IF UPPER$(t$)="D"
  1960.         seiten|=2
  1961.         med|=249
  1962.         ALERT 3,"Formatieren löscht alle Daten auf|der Diskette rettungslos!| Wirklich Formatieren ?",2," Ja | Nein ",a|
  1963.         DEFMOUSE pfeil$
  1964.         IF a|=1
  1965.           @up.format(1,seiten|,80,9,5,112,med|)
  1966.           okay!=TRUE
  1967.         ENDIF
  1968.       ENDIF
  1969.     UNTIL okay!
  1970.   ENDIF
  1971.   CLS
  1972.   @statuszeile
  1973.   @menueleiste
  1974.   @ausgabe_ab_zeile(nr%)
  1975.   PRINT CHR$(27)+"e";
  1976.   PRINT AT(sp|,zp|);
  1977. RETURN
  1978. > PROCEDURE up.format(drv%,sid%,trk%,spt%,fat%,dir%,med%)
  1979.   buf$=SPACE$(10000)
  1980.   VOID FRE(0)
  1981.   buf%=VARPTR(buf$)
  1982.   FOR t%=0 TO trk%-1
  1983.     FOR s%=0 TO sid%-1
  1984.       e%=XBIOS(10,L:buf%,L:0,drv%,spt%,t%,s%,1,L:&H87654321,0)
  1985.       IF e%
  1986.         PRINT
  1987.         PRINT "Seite ";s%," spur ";t%;" Fehler ";e%;" Sektor ";
  1988.         b%=buf%
  1989.         WHILE DPEEK(b%)
  1990.           PRINT DPEEK(b%)'
  1991.           ADD b%,2
  1992.         WEND
  1993.       ELSE
  1994.         OUT 5,42
  1995.       ENDIF
  1996.     NEXT s%
  1997.   NEXT t%
  1998.   sec%=trk%*spt%*sid%
  1999.   buf$=STRING$(6,0)+MKL$(XBIOS(17))+CHR$(0)+MKI$(2)+CHR$(2)
  2000.   buf$=buf$+MKI$(&H100)+CHR$(2)+CHR$(dir%)+CHR$(dir%/256)
  2001.   buf$=buf$+CHR$(sec%)+CHR$(sec%/256)+CHR$(med%)
  2002.   buf$=buf$+MKI$(fat%*256)+MKI$(spt%*256)+MKI$(sid%*256)
  2003.   buf$=buf$+MKI$(0)+STRING$(512,0)
  2004.   VOID XBIOS(9,L:VARPTR(buf$),L:o#,drv%,0,0,1)
  2005.   VOID BIOS(7,drv%)
  2006.   buf$=MKL$(&HF7FFFF00)+STRING$(508,0)
  2007.   VOID BIOS(4,1,L:VARPTR(buf$),1,1,drv%)
  2008.   VOID BIOS(4,1,L:VARPTR(buf$),1,fat%+1,drv%)
  2009.   PRINT
  2010.   PRINT DFREE(drv%+1);" Bytes frei"
  2011. RETURN
  2012. > PROCEDURE name_aendern
  2013.   LOCAL x&,y&,b&,h&,temp$,exit%,ph$,n_ame$
  2014.   CHAR{{OB_SPEC(r_ordner%,edordner&)}}=n_ame$
  2015.   ~FORM_CENTER(r_ordner%,x&,y&,b&,h&)
  2016.   GET x&,y&,x&+b&,y&+h&,temp$
  2017.   ~OBJC_DRAW(r_ordner%,0,7,0,0,640,400)
  2018.   TEXT 234,190,"Neuer Textname      "
  2019.   exit%=FORM_DO(r_ordner%,edordner&)
  2020.   n_ame$=CHAR{{OB_SPEC(r_ordner%,edordner&)}}
  2021.   ~OBJC_CHANGE(r_ordner%,exit%,0,x&,y&,b&,h&,0,0)
  2022.   PUT x&,y&,temp$
  2023.   IF exit%=ordokay& AND n_ame$<>""
  2024.     IF LEN(n_ame$)>8
  2025.       filename$=LEFT$(n_ame$,8)+"."+RIGHT$(n_ame$,3)
  2026.     ELSE
  2027.       filename$=n_ame$+".TXT"
  2028.     ENDIF
  2029.     @statuszeile
  2030.   ENDIF
  2031. RETURN
  2032. > PROCEDURE laufwerk_wechseln
  2033.   LOCAL x&,y&,b&,h&,temp$,laufw|,t$,wahl|
  2034.   ~FORM_CENTER(r_laufwerk%,x&,y&,b&,h&)
  2035.   ~OBJC_DRAW(r_laufwerk%,0,7,x&,y&,b&,h&)
  2036.   laufw|=BIOS(10)
  2037.   REPEAT
  2038.     t$=INKEY$
  2039.     SELECT t$
  2040.     CASE "a","A"
  2041.       wahl|=0
  2042.     CASE "b","B"
  2043.       wahl|=1
  2044.     CASE "c","C"
  2045.       wahl|=2
  2046.     CASE "d","D"
  2047.       wahl|=3
  2048.     CASE "e","E"
  2049.       wahl|=4
  2050.     CASE "f","F"
  2051.       wahl|=5
  2052.     ENDSELECT
  2053.   UNTIL BTST(laufw|,wahl|) !nur ende wenn Laufwerk angeschloßen ist
  2054.   CHDRIVE wahl|+1
  2055.   pfad$=CHR$(65+wahl|)+":\*"
  2056.   CHDIR CHR$(65+wahl|)+":\"
  2057.   PUT x&,y&,temp$
  2058.   CLR temp$
  2059. RETURN
  2060. > PROCEDURE prg_ende
  2061.   LOCAL sp|,zp|,x&,y&,b&,h&,temp$,w%
  2062.   sp|=CRSCOL
  2063.   zp|=CRSLIN
  2064.   DEFMOUSE crs1$
  2065.   ~FORM_CENTER(r_hinende%,x&,y&,b&,h&)
  2066.   GET x&,y&,x&+b&,y&+h&,temp$
  2067.   ~OBJC_DRAW(r_hinende%,0,7,0,0,640,400)
  2068.   REPEAT
  2069.     MOUSE mx&,my&,mk|
  2070.     IF mk| OR INKEY$=CHR$(13)
  2071.       w%=OBJC_FIND(r_hinende%,0,7,mx&,my&)
  2072.       IF w%=endeja& OR INKEY$=CHR$(13)
  2073.         PRINT CHR$(27)+"f";  ! Cursor ausschalten
  2074.         PRINT CHR$(27)+"q";  ! reverse Schrift aus
  2075.         @anfang
  2076.         SETCOLOR 0,7,7,7
  2077.         EDIT
  2078.       ENDIF
  2079.     ENDIF
  2080.   UNTIL w%=endenein&
  2081.   w%=0
  2082.   PUT x&,y&,temp$
  2083.   WHILE MOUSEK=0
  2084.   WEND
  2085.   DEFMOUSE pfeil$
  2086. RETURN
  2087. ' ----------------------------------------------------------------------------
  2088. ' Hauptprogramm Block
  2089. ' ----------------------------------------------------------------------------
  2090. > PROCEDURE hpblock
  2091.   LOCAL w%,mx&,my&,mk|,x&,y&,b&,h&,t$,p|,temp$
  2092.   ~FORM_CENTER(r_block%,x&,y&,b&,h&)
  2093.   GET x&,y&,x&+b&,y&+h&,temp$
  2094.   ~OBJC_DRAW(r_block%,0,7,0,0,640,400)
  2095.   REPEAT
  2096.     t$=INKEY$
  2097.     MOUSE mx&,my&,mk|
  2098.   UNTIL t$<>"" OR mk|=1
  2099.   PUT x&,y&,temp$
  2100.   IF mk|=1
  2101.     w%=OBJC_FIND(r_block%,0,7,mx&,my&)
  2102.     IF w%>=banf& AND w%<=bmark&
  2103.       t$=MID$(blockstr$,w%-1,1)
  2104.     ENDIF
  2105.   ENDIF
  2106.   SELECT t$
  2107.   CASE "a","A"
  2108.     @block_anfang
  2109.   CASE "e","E"
  2110.     @block_ende
  2111.   CASE "l","L"
  2112.     @block_laden
  2113.   CASE "s","S"
  2114.     @block_speichern
  2115.   CASE "k","K"
  2116.     @block_kopieren
  2117.   CASE "v","V"
  2118.     @block_verschieben
  2119.   CASE "d","D"
  2120.     @block_loeschen
  2121.   CASE "p","P"
  2122.     @block_drucken
  2123.   CASE "m","M"
  2124.     @block_markierung
  2125.   ENDSELECT
  2126. RETURN
  2127. > PROCEDURE block_anfang
  2128.   LOCAL sp|,zp|
  2129.   IF (oberste%-2)+CRSLIN<=anzahl_zeilen%
  2130.     vorher!=block!
  2131.     blockanfang%=(oberste%-2)+CRSLIN
  2132.     IF blockende%>=blockanfang%
  2133.       block!=TRUE
  2134.     ELSE
  2135.       block!=FALSE
  2136.     ENDIF
  2137.   ENDIF
  2138.   zp|=CRSLIN
  2139.   sp|=CRSCOL
  2140.   @ausgabe_ab_zeile(oberste%+1)
  2141.   PRINT AT(sp|,zp|);
  2142. RETURN
  2143. > PROCEDURE block_ende
  2144.   LOCAL sp|,zp|
  2145.   IF (oberste%-2)+CRSLIN<=anzahl_zeilen%
  2146.     vorher!=block!
  2147.     blockende%=(oberste%-2)+CRSLIN
  2148.     IF blockende%>=blockanfang%
  2149.       block!=TRUE
  2150.     ELSE
  2151.       block!=FALSE
  2152.     ENDIF
  2153.   ENDIF
  2154.   zp|=CRSLIN
  2155.   sp|=CRSCOL
  2156.   @ausgabe_ab_zeile(oberste%+1)
  2157.   PRINT AT(sp|,zp|);
  2158. RETURN
  2159. > PROCEDURE block_kopieren
  2160.   LOCAL an_zeile%
  2161.   IF block!
  2162.     an_zeile%=(oberste%-2)+CRSLIN
  2163.     IF an_zeile%<=anzahl_zeilen%+1
  2164.       IF anzahl_zeilen%+blocklaenge%<=max_zeilen%
  2165.         blocklaenge%=blockende%-blockanfang%
  2166.         FOR i&=0 TO blocklaenge%  ! Testen wo eingefügt wird vor oder hinter pos
  2167.           INSERT zeile$(an_zeile%+i&)=zeile$(i&+blockanfang%)
  2168.         NEXT i&
  2169.         ADD anzahl_zeilen%,blocklaenge%
  2170.         @ausgabe_ab_zeile(oberste%+1)
  2171.       ELSE
  2172.         ALERT 1,"Der Speicherplatz reicht|dafür nicht aus.",1," Return ",a%
  2173.         DEFMOUSE pfeil$
  2174.       ENDIF
  2175.     ELSE
  2176.       PRINT CHR$(7);  ! Fehlerglocke
  2177.     ENDIF
  2178.   ENDIF
  2179. RETURN
  2180. > PROCEDURE block_verschieben
  2181.   LOCAL an_zeile%
  2182.   zei_pos|=oberste%-2+CRSLIN
  2183.   IF block!
  2184.     IF (oberste%-2)+CRSLIN<blockanfang% OR (oberste%-2)+CRSLIN>blockende%
  2185.       an_zeile%=(oberste%-2)+CRSLIN
  2186.       IF an_zeile%<=anzahl_zeilen%+1
  2187.         IF anzahl_zeilen%+blocklaenge%<=max_zeilen%
  2188.           blocklaenge%=blockende%-blockanfang%
  2189.           FOR i&=1 TO blocklaenge%  ! Testen wo eingefügt wird vor oder hinter pos
  2190.             IF blockanfang%<an_zeile%
  2191.               INSERT zeile$(an_zeile%)=zeile$(blockanfang%)
  2192.               DELETE zeile$(blockanfang%)
  2193.             ELSE
  2194.               INSERT zeile$(an_zeile%+i&)=zeile$(blockanfang%)
  2195.               DELETE zeile$(blockanfang&)
  2196.             ENDIF
  2197.           NEXT i&
  2198.           @ausgabe_ab_zeile(oberste%+1)
  2199.           blockanfang%=an_zeile%
  2200.           blockende%=blockanfang%+blocklaenge%
  2201.         ENDIF
  2202.       ENDIF
  2203.     ELSE
  2204.       ALERT 1,"Cursor im Block !! |Das geth aber wirklich nicht !",1,"Return ",a%
  2205.       DEFMOUSE pfeil$
  2206.     ENDIF
  2207.   ELSE
  2208.     PRINT CHR$(7);  ! Fehlerglocke
  2209.   ENDIF
  2210. RETURN
  2211. > PROCEDURE block_speichern
  2212.   LOCAL sp|,zp|
  2213.   IF block!
  2214.     zp|=CRSLIN
  2215.     sp|=CRSCOL
  2216.     PRINT CHR$(27)+"f";   ! Cursor abschalten
  2217.     @cl_s
  2218.     FILESELECT pfad$,"",filename$
  2219.     @pfad_merken
  2220.     IF NOT (RIGHT$(filename$)="\" OR filename$="")
  2221.       OPEN "O",#1,filename$
  2222.       FOR i%=blockanfang% TO blockende%
  2223.         PRINT #1,zeile$(i%)
  2224.       NEXT i%
  2225.       CLOSE #1
  2226.     ENDIF
  2227.     @cl_s
  2228.     PRINT CHR$(27)+"e"   ! Cursor einschalten
  2229.     @ausgabe_ab_zeile(oberste%+1)
  2230.     PRINT AT(sp|,zp|);
  2231.   ELSE
  2232.     ALERT 1,"Es ist noch kein Block für|eine Speicherung verfügbar !",1," Return ",a%
  2233.     DEFMOUSE pfeil$
  2234.   ENDIF
  2235.   DEFMOUSE pfeil$
  2236. RETURN
  2237. > PROCEDURE block_laden
  2238.   LOCAL zp|,laden_an%,anzeile%
  2239.   zp|=CRSLIN
  2240.   PRINT CHR$(27)+"f";   ! Cursor ausschalten
  2241.   @cl_s
  2242.   FILESELECT pfad$,"",filename$
  2243.   @pfad_merken
  2244.   IF NOT (RIGHT$(filename$)="\" OR filename$="")
  2245.     laden_an%=anzahl_zeilen%+1
  2246.     OPEN "I",#1,filename$
  2247.     REPEAT
  2248.       LINE INPUT #1,dummy$(laden_an%)
  2249.       INC laden_an%
  2250.     UNTIL EOF(#1) OR laden_an%=max_zeilen%
  2251.     CLOSE #1
  2252.     blocklaenge%=laden_an%-anzahl_zeilen%-1
  2253.     IF laden_an%=max_zeilen%
  2254.       ALERT 1,"Diese Datei ist zu groß, um|vollständig geladen zu werden.",1," Return ",a%
  2255.       DEFMOUSE pfeil$
  2256.     ELSE
  2257.       anzeile%=oberste%-2+CRSLIN
  2258.       block!=TRUE
  2259.       blockanfang%=anzeile%
  2260.       blockende%=blockanfang%+blocklaenge%-1
  2261.       FOR i%=1 TO blocklaenge%
  2262.         INSERT zeile$(anzeile%+i%)=dummy$(i%)
  2263.       NEXT i%
  2264.       oberste%=blockanfang%-1
  2265.       ADD anzahl_zeilen%,blocklaenge%
  2266.     ENDIF
  2267.   ENDIF
  2268.   PRINT CHR$(27)+"e";   ! Cursor einschalten
  2269.   @ausgabe_ab_zeile(oberste%+1)
  2270.   PRINT AT(1,3);
  2271.   DEFMOUSE pfeil$
  2272. RETURN
  2273. > PROCEDURE block_drucken
  2274.   LOCAL x&,y&,b&,h&,temp$,a|
  2275.   IF block!
  2276.     ALERT 2,"Willst du den aktuellen|Block ausdrucken ?",1," Ja | Nein ",a|
  2277.     DEFMOUSE pfeil$
  2278.     IF a|=1
  2279.       ~FORM_CENTER(r_hindruck%,x&,y&,b&,h&)
  2280.       GET x&,y&,x&+b&,y&+h&,temp$
  2281.       ~OBJC_DRAW(r_hindruck%,0,7,0,0,640,400)
  2282.       TEXT 225,224,"1"
  2283.       @drucken(blockanfang%,blockende%)
  2284.     ENDIF
  2285.   ENDIF
  2286. RETURN
  2287. > PROCEDURE block_loeschen
  2288.   LOCAL x&,y&,b&,h&,temp$,oben%,a|
  2289.   oben%=oberste%-2+CRSLIN
  2290.   IF block!
  2291.     ALERT 3,"Soll der Block wirklich|restlos gelöscht werden ?",1," Ja | Nein ",a|
  2292.     DEFMOUSE pfeil$
  2293.     IF a|=1
  2294.       ~FORM_CENTER(r_loeschen%,x&,y&,b&,h&)
  2295.       GET x&,y&,x&+b&,y&+h&,temp$
  2296.       ~OBJC_DRAW(r_loeschen%,0,7,0,0,640,400)
  2297.       blocklaenge%=blockende%-blockanfang%+1
  2298.       FOR i%=1 TO blocklaenge%
  2299.         DELETE zeile$(blockanfang%)
  2300.       NEXT i%
  2301.       SUB anzahl_zeilen%,blocklaenge%
  2302.       block!=FALSE
  2303.       oberste%=blockanfang%
  2304.       blockanfang%=0
  2305.       blockende%=0
  2306.       blocklaenge%=0
  2307.       block!=FALSE
  2308.       PRINT CHR$(27)+"q";  ! reverse Schrift aus
  2309.       PUT x&,y&,temp$
  2310.       @ausgabe_ab_zeile(oberste%+1)
  2311.       PRINT AT(1,3);
  2312.     ENDIF
  2313.   ENDIF
  2314. RETURN
  2315. > PROCEDURE block_markierung
  2316.   IF block!
  2317.     block!=FALSE
  2318.     PRINT CHR$(27)+"q";
  2319.     IF oberste%+24>=blockanfang% AND oberste%<=blockende%
  2320.       @ausgabe_ab_zeile(oberste%+1)
  2321.     ENDIF
  2322.     blockanfang%=0
  2323.     blockende%=0
  2324.     @statuszeile
  2325.   ENDIF
  2326. RETURN
  2327. ' ----------------------------------------------------------------------------
  2328. ' Hauptprogramm Arbeit
  2329. ' ----------------------------------------------------------------------------
  2330. > PROCEDURE hparbeit
  2331.   LOCAL x&,y&,b&,h&,t$,p|,temp$
  2332.   ~FORM_CENTER(r_arbeit%,x&,y&,b&,h&)
  2333.   GET x&,y&,x&+b&,y&+h&,temp$
  2334.   ~OBJC_DRAW(r_arbeit%,0,7,0,0,640,400)
  2335.   REPEAT
  2336.     t$=INKEY$
  2337.     MOUSE mx&,my&,mk|
  2338.   UNTIL t$<>"" OR mk|=1
  2339.   PUT x&,y&,temp$
  2340.   IF mk|=1
  2341.     w%=OBJC_FIND(r_arbeit%,0,7,mx&,my&)
  2342.     ' insert gomar3
  2343.     IF w%>=insert& AND w%<=gomar3&
  2344.       t$=MID$(arbstr$,w%-1,1)
  2345.     ENDIF
  2346.   ENDIF
  2347.   PUT x&,y&,temp$
  2348.   SELECT t$
  2349.   CASE "i","I"
  2350.     @arbeit_insert
  2351.   CASE "u","U"
  2352.     @arbeit_owert
  2353.   CASE "s","S"
  2354.     @arbeit_finde
  2355.   CASE "e","E"
  2356.     @arbeit_ersetze
  2357.   CASE "z","Z"
  2358.     @zeile_einfuegen
  2359.   CASE "d","D"
  2360.     @zeile_loeschen
  2361.   CASE "t","T"
  2362.     @zeile_trennen
  2363.   CASE "p","P"
  2364.     @pharsen
  2365.   CASE "n","N"
  2366.     @nochmal
  2367.   CASE "f","F"
  2368.     @text_format
  2369.   CASE "1"
  2370.     @setze_marke(1)
  2371.   CASE "2"
  2372.     @setze_marke(2)
  2373.   CASE "3"
  2374.     @setze_marke(3)
  2375.   CASE 33
  2376.     @springe_marke(1)
  2377.   CASE 34
  2378.     @springe_marke(2)
  2379.   CASE 35
  2380.     @springe_marke(3)
  2381.   ENDSELECT
  2382. RETURN
  2383. > PROCEDURE arbeit_finde
  2384.   LOCAL x&,y&,b&,h&,temp$,zp|,sp|,exit%
  2385.   sp|=CRSCOL
  2386.   zp|=CRSLIN
  2387.   DEFMOUSE crs1$
  2388.   CHAR{{OB_SPEC(r_suchetex%,sutext&)}}=suchstring$
  2389.   ~FORM_CENTER(r_suchetex%,x&,y&,b&,h&)
  2390.   GET x&,y&,x&+b&,y&+h&,temp$
  2391.   ~OBJC_DRAW(r_suchetex%,0,7,0,0,640,400)
  2392.   exit%=FORM_DO(r_suchetex%,sutext&)
  2393.   suchstring$=CHAR{{OB_SPEC(r_suchetex%,sutext&)}}
  2394.   ~OBJC_CHANGE(r_suchetex%,exit%,0,x&,y&,b&,h&,0,0)
  2395.   PUT x&,y&,temp$
  2396.   IF exit%=suokay& AND suchstring$<>""
  2397.     @suchen_ab(oberste%+1)
  2398.     suche!=TRUE
  2399.   ELSE
  2400.     PRINT AT(sp|,zp|);CHR$(7);
  2401.   ENDIF
  2402.   DEFMOUSE pfeil$
  2403.   @statuszeile
  2404. RETURN
  2405. > PROCEDURE arbeit_ersetze
  2406.   LOCAL x&,y&,b&,h&,temp$,zp|,sp|,exit%
  2407.   sp|=CRSCOL
  2408.   zp|=CRSLIN
  2409.   DEFMOUSE crs1$
  2410.   CHAR{{OB_SPEC(r_erstext%,erertext&)}}=ersatzstring$
  2411.   CHAR{{OB_SPEC(r_erstext%,ersutext&)}}=suchstring$
  2412.   ~FORM_CENTER(r_erstext%,x&,y&,b&,h&)
  2413.   GET x&,y&,x&+b&,y&+h&,temp$
  2414.   ~OBJC_DRAW(r_erstext%,0,7,0,0,640,400)
  2415.   exit%=FORM_DO(r_erstext%,ersutext&)
  2416.   suchstring$=CHAR{{OB_SPEC(r_erstext%,ersutext&)}}
  2417.   ersatzstring$=CHAR{{OB_SPEC(r_erstext%,erertext&)}}
  2418.   ~OBJC_CHANGE(r_erstext%,exit%,0,x&,y&,b&,h&,0,0)
  2419.   PUT x&,y&,temp$
  2420.   IF exit%=ersokay& AND suchstring$<>"" AND ersatzstring$<>""
  2421.     @ersetzen_ab(oberste%+zp|+1)
  2422.     suche!=FALSE
  2423.   ELSE
  2424.     PRINT AT(sp|,zp|);CHR$(7);
  2425.   ENDIF
  2426.   DEFMOUSE pfeil$
  2427.   @statuszeile
  2428. RETURN
  2429. > PROCEDURE arbeit_insert
  2430.   LOCAL sp|,zp|
  2431.   zp|=CRSLIN
  2432.   sp|=CRSCOL
  2433.   insertmode!=TRUE
  2434.   PRINT AT(21,1);"I"
  2435.   PRINT AT(sp|,zp|);
  2436. RETURN
  2437. > PROCEDURE arbeit_owert
  2438.   LOCAL sp|,zp|
  2439.   zp|=CRSLIN
  2440.   sp|=CRSCOL
  2441.   insertmode!=FALSE
  2442.   PRINT AT(21,1);"O"
  2443.   PRINT AT(sp|,zp|);
  2444. RETURN
  2445. > PROCEDURE zeile_einfuegen
  2446.   LOCAL sp|,zp|
  2447.   IF anzahl_zeilen%<max_zeilen% AND anzahl_zeilen%>=(oberste%-2)+CRSLIN
  2448.     PRINT CHR$(27)+"L";  ! Bildschirm ab Cursor eine Zeile runter schieben
  2449.     @menueleiste
  2450.     INC anzahl_zeilen%
  2451.     sp|=CRSCOL
  2452.     zp|=CRSLIN
  2453.     nr%=(oberste%-2)+zp|
  2454.     INSERT zeile$(nr%)=""
  2455.     IF block!
  2456.       IF (oberste%-2)+CRSLIN<=blockanfang%
  2457.         INC blockanfang%
  2458.       ENDIF
  2459.       IF (oberste%-2)+CRSLIN<=blockende%
  2460.         INC blockende%
  2461.       ENDIF
  2462.     ENDIF
  2463.   ELSE
  2464.     PRINT CHR$(7);  ! Fehlerglocke
  2465.   ENDIF
  2466. RETURN
  2467. > PROCEDURE zeile_loeschen
  2468.   LOCAL sp|,zp|
  2469.   IF (oberste%-2)+CRSLIN<=anzahl_zeilen%
  2470.     zp|=CRSLIN
  2471.     sp|=CRSCOL
  2472.     PRINT CHR$(27)+"M";  ! Bildschirm hochschieben
  2473.     IF block!
  2474.       IF oberste%+23>=blockanfang% AND oberste%+23<=blockende%
  2475.         PRINT CHR$(27)+"p";   ! revers on
  2476.       ELSE
  2477.         PRINT CHR$(27)+"q";   ! revers off
  2478.       ENDIF
  2479.     ENDIF
  2480.     PRINT AT(1,24);CHR$(27)+"K";
  2481.     @menueleiste
  2482.     PRINT AT(1,24);zeile$(oberste%+23);
  2483.     PRINT AT(sp|,zp|);
  2484.     DELETE zeile$((oberste%-2)+CRSLIN)
  2485.     DEC anzahl_zeilen%
  2486.   ELSE
  2487.     PRINT CHR$(7);   ! Fehlerglocke falls Cursor hinter Text
  2488.   ENDIF
  2489. RETURN
  2490. > PROCEDURE pharsen
  2491.   LOCAL x%,y%,k%,cc$,sp|,zp|
  2492.   sp|=CRSCOL
  2493.   zp|=CRSLIN
  2494.   PRINT CHR$(27)+"f";
  2495.   GET 14,90,594+16,325,cc$
  2496.   DEFFILL 1,1,1
  2497.   PBOX 18,94,594+16,325
  2498.   DEFFILL 1,0,0
  2499.   PBOX 14,90,590+16,321
  2500.   BOX 17,93,587+16,318
  2501.   @head(32,102,584,"Phrasen")
  2502.   DEFTEXT 1,0,0,6
  2503.   TEXT 288,309,"Zurück"
  2504.   TEXT 188,309,"Laden"
  2505.   TEXT 378,309,"Speichern"
  2506.   DEFTEXT 1,0,0,13
  2507.   BOX 260,296,360,314
  2508.   BOX 261,297,359,313
  2509.   BOX 160,296,260,314
  2510.   BOX 161,297,259,313
  2511.   BOX 360,296,460,314
  2512.   BOX 361,297,459,313
  2513.   FOR i%=1 TO 10
  2514.     PRINT AT(5,8+i%);"F"+STR$(i%,2);":  "
  2515.     PRINT AT(10,8+i%);phr$(i%)
  2516.   NEXT i%
  2517.   DO
  2518.     REPEAT
  2519.       MOUSE x%,y%,k%
  2520.       IF k%=1 AND (x%>160 AND x%<259 AND y%>297 AND y%<313)
  2521.         @pharsen_laden
  2522.       ENDIF
  2523.       IF k%=1 AND (x%>360 AND x%<460 AND y%>297 AND y%<313)
  2524.         @pharsen_speichern
  2525.       ENDIF
  2526.       ty%=(y%-128)/16+1
  2527.       IF (ty%<1 OR ty%>10)
  2528.         IF tya%>0
  2529.           PRINT AT(5,8+tya%);"F"+STR$(tya%,2)+":  "
  2530.           PRINT AT(10,8+tya%);phr$(tya%)
  2531.         ENDIF
  2532.         tya%=0
  2533.       ELSE
  2534.         IF tya%<>ty% AND ty%>0 AND ty%<11
  2535.           IF tya%>0
  2536.             PRINT AT(5,8+tya%);"F"+STR$(tya%,2)+":  "
  2537.             PRINT AT(10,8+tya%);phr$(tya%)
  2538.           ENDIF
  2539.           tya%=ty%
  2540.           PRINT AT(5,8+tya%);CHR$(27)+"p"+"F"+STR$(tya%,2);":  "
  2541.           PRINT AT(10,8+tya%);phr$(tya%)+CHR$(27)+"q"
  2542.         ENDIF
  2543.       ENDIF
  2544.     UNTIL k% AND ty%>0 AND ty%<13
  2545.     EXIT IF x%>261 AND y%>297 AND x%<359 AND y%<313
  2546.     IF ty%>0 AND ty%<11
  2547.       PRINT AT(5,8+tya%);"F"+STR$(tya%,2)+":  "
  2548.       PRINT AT(10,8+tya%);phr$(tya%)
  2549.       PRINT AT(10,8+ty%);
  2550.       FORM INPUT 63 AS phr$(ty%)
  2551.     ENDIF
  2552.   LOOP
  2553.   PUT 14,90,cc$
  2554.   CLR tya%,ty%
  2555.   PRINT AT(sp|,zp|);CHR$(27)+"e";
  2556. RETURN
  2557. > PROCEDURE pharsen_laden
  2558.   LOCAL temp$
  2559.   GET 155,15,480,40,temp$
  2560.   @head(157,20,472,"Pharsen Laden")
  2561.   FILESELECT "*.PHR","",filename$
  2562.   @pfad_merken
  2563.   IF NOT (RIGHT$(filename$)="\" OR filename$="")
  2564.     OPEN "I",#3,filename$
  2565.     FOR i|=1 TO 10
  2566.       LINE INPUT #3,phr$(i|)
  2567.     NEXT i|
  2568.     CLOSE #3
  2569.   ENDIF
  2570.   PUT 155,15,temp$
  2571.   FOR i%=1 TO 10
  2572.     PRINT AT(5,8+i%);"F"+STR$(i%,2);":  "
  2573.     PRINT AT(10,8+i%);phr$(i%)
  2574.   NEXT i%
  2575. RETURN
  2576. > PROCEDURE pharsen_speichern
  2577.   GET 155,15,480,40,temp$
  2578.   @head(157,20,472,"Pharsen Speichern")
  2579.   FILESELECT "*.PHR","",filename$
  2580.   @pfad_merken
  2581.   IF NOT (RIGHT$(filename$)="\" OR filename$="")
  2582.     OPEN "O",#3,filename$
  2583.     FOR i|=1 TO 10
  2584.       PRINT #3,phr$(i|)
  2585.     NEXT i|
  2586.     CLOSE #3
  2587.   ENDIF
  2588.   PUT 155,15,temp$
  2589. RETURN
  2590. > PROCEDURE zeile_trennen
  2591.   LOCAL sp|,zp|,laenge|,stehen_bleibt$,abschneiden$
  2592.   sp|=CRSCOL
  2593.   zp|=CRSLIN
  2594.   nr%=(oberste%-2)+CRSLIN
  2595.   laenge|=LEN(zeile$(nr%))
  2596.   IF nr%=<anzahl_zeilen% AND CRSCOL<=laenge% AND anzahl_zeilen%<max_zeilen%
  2597.     stehen_bleibt$=LEFT$(zeile$(nr%),CRSCOL-1)
  2598.     abschneiden$=MID$(zeile$(nr%),CRSCOL)
  2599.     PRINT CHR$(27)+"K";   ! Zeile ab Cursor löschen
  2600.     IF CRSLIN<24
  2601.       PRINT AT(1,CRSLIN+1);CHR$(27)+"L";  ! Bildschirm ab Cursor nach unten
  2602.       PRINT AT(1,CRSLIN);abschneiden$;
  2603.       @menueleiste
  2604.     ENDIF
  2605.     zeile$(nr%)=stehen_bleibt$
  2606.     INSERT zeile$(nr%+1)=abschneiden$
  2607.     INC anzahl_zeilen%
  2608.     PRINT AT(1,CRSLIN);
  2609.   ELSE
  2610.     PRINT CHR$(7);  ! Fehlerglocke
  2611.   ENDIF
  2612. RETURN
  2613. > PROCEDURE zeile_join
  2614.   LOCAL sp|,zp|
  2615.   sp|=CRSCOL
  2616.   zp|=CRSLIN
  2617.   IF (oberste%-2)+CRSLIN<anzahl_zeilen%
  2618.     nr%=(oberste%-2)+CRSLIN
  2619.     IF LEN(zeile$(nr%))+LEN(zeile$(nr%+1))<zlen%
  2620.       zeile$(nr%)=zeile$(nr%)+zeile$(nr%+1)
  2621.       PRINT AT(1,zp|);zeile$(nr%);
  2622.       DELETE zeile$(nr%+1)
  2623.       PRINT AT(1,zp|+1);CHR$(27)+"M";  ! Bildschirm hochschieben
  2624.       IF block!
  2625.         IF i%>=blockanfang% AND i%<=blockende%
  2626.           PRINT CHR$(27)+"p";  ! revers on
  2627.         ELSE
  2628.           PRINT CHR$(27)+"q";  ! revers off
  2629.         ENDIF
  2630.       ENDIF
  2631.       PRINT AT(1,24);CHR$(27)+"K";
  2632.       @menueleiste
  2633.       PRINT AT(1,24);zeile$(oberste%+23);
  2634.       DEC anzahl_zeilen%
  2635.     ELSE
  2636.     ENDIF
  2637.   ELSE
  2638.     PRINT CHR$(7);  ! Fehlerglocke falls Cursor hinter Text
  2639.   ENDIF
  2640.   PRINT AT(sp|,zp|);
  2641. RETURN
  2642. > PROCEDURE nochmal
  2643.   IF suche!
  2644.     @suchen_ab(oberste%-2+CRSLIN+1)
  2645.   ELSE
  2646.     @ersetzen_ab(oberste%-2+CRSLIN+1)
  2647.   ENDIF
  2648. RETURN
  2649. > PROCEDURE text_format
  2650.   LOCAL x&,y&,b&,h&,t$,p%,temp$,sp|,zp|
  2651.   ~FORM_CENTER(r_textform%,x&,y&,b&,h&)
  2652.   GET x&,y&,x&+b&,y&+h&,temp$
  2653.   ~OBJC_DRAW(r_textform%,0,7,0,0,640,400)
  2654.   sp|=CRSCOL
  2655.   zp|=CRSLIN
  2656.   REPEAT
  2657.     t$=INKEY$
  2658.   UNTIL t$<>""
  2659.   PUT x&,y&,temp$
  2660.   SELECT t$
  2661.   CASE "z","Z"
  2662.     @textformat(nr%,nr%)
  2663.   CASE "a","A"
  2664.     CLR p%
  2665.     nr%=oberste%-2+CRSLIN
  2666.     FOR i%=nr% TO anzahl_zeilen%
  2667.       IF RIGHT$(zeile$(i%))=CHR$(174)
  2668.         p%=i%
  2669.       ENDIF
  2670.       EXIT IF p%>0
  2671.     NEXT i%
  2672.     @textformat(nr%,p%)
  2673.   CASE "t","T"
  2674.     @textformat(1,anzahl_zeilen%)
  2675.   ENDSELECT
  2676.   PRINT AT(sp|,zp|);
  2677. RETURN
  2678. > PROCEDURE setze_marke(nr|)
  2679.   LOCAL sp|,zp|
  2680.   sp|=CRSCOL
  2681.   zp|=CRSLIN
  2682.   nr%=oberste%-2+CRSLIN
  2683.   marke%(nr|)=nr%
  2684.   PRINT AT(sp|,zp|);
  2685. RETURN
  2686. > PROCEDURE springe_marke(nr|)
  2687.   IF marke%(nr|)>0
  2688.     oberste%=marke%(nr|)
  2689.     @ausgabe_ab_zeile(oberste%)
  2690.   ENDIF
  2691.   PRINT AT(1,3);
  2692. RETURN
  2693. ' ----------------------------------------------------------------------------
  2694. ' Hauptprogramm Scroll
  2695. ' ----------------------------------------------------------------------------
  2696. > PROCEDURE hpscroll
  2697.   LOCAL x&,y&,b&,h&,t$,p|,temp$,um|,sp|,zp|
  2698.   sp|=CRSCOL
  2699.   zp|=CRSLIN
  2700.   ~FORM_CENTER(r_scroll%,x&,y&,b&,h&)
  2701.   GET x&,y&,x&+b&,y&+h&,temp$
  2702.   ~OBJC_DRAW(r_scroll%,0,7,0,0,640,400)
  2703.   REPEAT
  2704.     t$=INKEY$
  2705.   UNTIL t$<>""
  2706.   PUT x&,y&,temp$
  2707.   um|=BIOS(11,-1) AND 16
  2708.   t$=RIGHT$(t$)
  2709.   IF um|=16
  2710.     IF t$=CHR$(&H48)       ! Seite Hoch
  2711.       @page_up
  2712.     ELSE IF t$=CHR$(&H50)  ! Seite Runter
  2713.       @page_down
  2714.     ELSE IF t$=CHR$(&H4B)  ! Seite rechts
  2715.     ELSE IF t$=CHR$(&H4D)  ! Seite links
  2716.     ELSE IF t$=CHR$(&H47) ! Textanfang
  2717.       @text_anfang
  2718.     ENDIF
  2719.   ELSE IF t$=CHR$(&H48)   ! Zeile hoch
  2720.     anz%=oberste%-2+CRSLIN
  2721.     anzahl_zeilen%=MAX(anz%,anzahl_zeilen%)
  2722.     IF CRSLIN=24
  2723.       @scroll_rauf
  2724.     ELSE
  2725.       PRINT CHR$(27)+"B";
  2726.     ENDIF
  2727.   ELSE IF t$=CHR$(&H50)   ! Zeile runter
  2728.     IF CRSLIN=3
  2729.       @scroll_runter
  2730.     ELSE
  2731.       PRINT CHR$(27)+"A";
  2732.     ENDIF
  2733.   ELSE IF t$=CHR$(&H47)   ! seitenanfang
  2734.     PRINT AT(1,3);
  2735.   ELSE
  2736.     PRINT AT(sp|,zp|);
  2737.   ENDIF
  2738. RETURN
  2739. > PROCEDURE text_anfang
  2740.   IF oberste%>0
  2741.     PRINT CHR$(27)+"f";
  2742.     oberste%=0
  2743.     @ausgabe_ab_zeile(1)
  2744.     PRINT AT(1,3);
  2745.   ENDIF
  2746. RETURN
  2747. ' ----------------------------------------------------------------------------
  2748. ' Hauptprogramm Attribute
  2749. ' ----------------------------------------------------------------------------
  2750. > PROCEDURE hpattribute
  2751.   LOCAL x&,y&,b&,h&,t$,p|,temp$,sp|,zp|
  2752.   sp|=CRSCOL
  2753.   zp|=CRSLIN
  2754.   PRINT CHR$(27)+"f";
  2755.   ~FORM_CENTER(r_textattr%,x&,y&,b&,h&)
  2756.   GET x&,y&,x&+b&,y&+h&,temp$
  2757.   ~OBJC_DRAW(r_textattr%,0,7,0,0,640,400)
  2758.   REPEAT
  2759.     t$=INKEY$
  2760.   UNTIL t$<>""
  2761.   PUT x&,y&,temp$
  2762.   IF LEN(t$)=2
  2763.     t|=ASC(RIGHT$(t$))
  2764.     IF t|=&H3F
  2765.       t$="F5"
  2766.     ELSE IF t|=&H40
  2767.       t$="F6"
  2768.     ELSE IF t|=&H41
  2769.       t$="F7"
  2770.     ELSE IF t|=&H42
  2771.       t$="F8"
  2772.     ENDIF
  2773.   ENDIF
  2774.   SELECT t$
  2775.   CASE "l","L","F5"
  2776.     links!=TRUE
  2777.     rechts!=FALSE
  2778.     blocksatz!=FALSE
  2779.     zentre!=FALSE
  2780.     PRINT AT(27,1);"Links "
  2781.   CASE "r","R","F6"
  2782.     links!=FALSE
  2783.     rechts!=TRUE
  2784.     blocksatz!=FALSE
  2785.     zentre!=FALSE
  2786.     PRINT AT(27,1);"Recht "
  2787.   CASE "z","Z","F7"
  2788.     links!=FALSE
  2789.     rechts!=FALSE
  2790.     blocksatz!=FALSE
  2791.     zentre!=TRUE
  2792.     PRINT AT(27,1);"Zentr "
  2793.   CASE "b","B","F8"
  2794.     links!=FALSE
  2795.     rechts!=FALSE
  2796.     blocksatz!=TRUE
  2797.     zentre!=FALSE
  2798.     PRINT AT(27,1);"Blocks"
  2799.   CASE "f","F"
  2800.   CASE "u","U"
  2801.   CASE "k","K"
  2802.   CASE "h","H"
  2803.   CASE "s","S"
  2804.   CASE "p","P"
  2805.   ENDSELECT
  2806.   PRINT CHR$(27)+"e";
  2807.   PRINT AT(sp|,zp|);
  2808. RETURN
  2809. ' ----------------------------------------------------------------------------
  2810. ' Hauptprogramm ACC'S
  2811. ' ----------------------------------------------------------------------------
  2812. > PROCEDURE hpaccs
  2813.   LOCAL bild$,raus!
  2814.   SGET bild$
  2815.   DIM me$(14)
  2816. menuedata:
  2817.   DATA ACC's,     Bitte ein ACC     ,     anklicken ,1,2,3,4,5,6,""
  2818.   DATA Ende,Zurück,"",""
  2819.   OPTION BASE 0
  2820.   RESTORE menuedata
  2821.   FOR i|=0 TO 13
  2822.     READ me$(i|)
  2823.   NEXT i|
  2824.   OPENW 0
  2825.   CLS
  2826.   MENU me$()
  2827.   ON MENU GOSUB menarbeit
  2828.   DO
  2829.     ON MENU
  2830.     EXIT IF raus!=TRUE
  2831.   LOOP
  2832.   ERASE me$()
  2833.   raus!=FALSE
  2834.   OPTION BASE 1
  2835.   CLOSEW 0
  2836.   CLS
  2837.   SPUT bild$
  2838.   DEFMOUSE pfeil$
  2839. RETURN
  2840. > PROCEDURE menarbeit
  2841.   LOCAL w%
  2842.   w%=MENU(0)
  2843.   IF w%=11
  2844.     raus!=TRUE
  2845.   ENDIF
  2846. RETURN
  2847. ' ----------------------------------------------------------------------------
  2848. ' Hauptprogramm Einstellung
  2849. ' ----------------------------------------------------------------------------
  2850. > PROCEDURE hpeinstell
  2851.   LOCAL x&,y&,b&,h&,t$,p|,temp$
  2852.   ~FORM_CENTER(r_einstell%,x&,y&,b&,h&)
  2853.   GET x&,y&,x&+b&,y&+h&,temp$
  2854.   ~OBJC_DRAW(r_einstell%,0,7,0,0,640,400)
  2855.   REPEAT
  2856.     MOUSE mx&,my&,mk|
  2857.     t$=INKEY$
  2858.   UNTIL t$<>"" OR mk|
  2859.   IF mk|
  2860.     w%=OBJC_FIND(r_einstell%,0,7,mx&,my&)
  2861.     IF w%>=seiform& AND w%<=tgestalt&
  2862.       t$=MID$(einstr$,w%-1,1)
  2863.     ENDIF
  2864.   ENDIF
  2865.   PUT x&,y&,temp$
  2866.   SELECT t$
  2867.   CASE "s","S"
  2868.     @seitenformat
  2869.   CASE "z","Z"
  2870.     @zeilenlaenge
  2871.   CASE "d","D"
  2872.     GET 117,58,521,360,temp1$
  2873.     @einstellung_grafik
  2874.     @einstellung_select
  2875.     PUT 117,58,temp1$
  2876.   CASE "h","H"
  2877.     @cl_s
  2878.     PRINT CHR$(27)+"f";
  2879.     PRINT AT(1,3);"Einstellen des Druckertreibers :"
  2880.     PRINT AT(1,4);"ELITE = 27 , 77 :";
  2881.     INPUT "",esc|,code|
  2882.     elite$=CHR$(esc|)+CHR$(code|)
  2883.     PRINT AT(1,5);"PICA = 27 , 80 :";
  2884.     INPUT "",esc|,code|
  2885.     pica$=CHR$(esc|)+CHR$(code|)
  2886.     PRINT AT(1,6);"NLO-Ein = 27 , 120 , 49 :";
  2887.     INPUT "",esc|,code|,mod|
  2888.     nlq$=CHR$(esc|)+CHR$(code|)+CHR$(mod|)
  2889.     PRINT AT(1,7);"NLQ-Aus = 27 , 120 , 48 :";
  2890.     INPUT "",esc|,code|,mod|
  2891.     nlqaus$=CHR$(esc|)+CHR$(code|)+CHR$(mod|)
  2892.     PRINT AT(1,8);"Schmalschrift an = 27 , 15 :";
  2893.     INPUT "",esc|,code|
  2894.     schmal$=CHR$(esc|)+CHR$(code|)
  2895.     PRINT AT(1,9);"Schmalschrift aus = 18 :";
  2896.     INPUT "",code|
  2897.     schmalaus$=CHR$(code|)
  2898.     PRINT AT(1,10);"Proportional an = 27 , 112 , 49 :";
  2899.     INPUT "",esc|,code|,mod|
  2900.     prop$=CHR$(esc|)+CHR$(code|)+CHR$(mod|)
  2901.     PRINT AT(1,11);"Proportional aus = 27 , 112 , 48 :";
  2902.     INPUT "",esc|,code|,mod|
  2903.     propaus$=CHR$(esc|)+CHR$(code|)+CHR$(mod|)
  2904.     PRINT AT(1,12);"Kursiv ein = 27 , 52 :";
  2905.     INPUT "",esc|,code|
  2906.     kur$=CHR$(esc|)+CHR$(code|)
  2907.     PRINT AT(1,13);"Kursiv aus = 27 , 53 :";
  2908.     INPUT "",esc|,code|
  2909.     kuraus$=CHR$(esc|)+CHR$(code|)
  2910.     PRINT AT(1,14);"Doppeldruck an = 27 , 71 :";
  2911.     INPUT "",esc|,code|
  2912.     dopp$=CHR$(esc|)+CHR$(code|)
  2913.     PRINT AT(1,15);"Doppeldruck aus = 27 , 72 :";
  2914.     INPUT "",esc|,code|
  2915.     doppaus$=CHR$(esc|)+CHR$(code|)
  2916.     druck$=CHR$(27)+"R"+CHR$(2)+schmalaus$+elite$
  2917.     ALERT 3,"Sollte sich auf diese Weise|dein Drucker NICHT anpassen|lassen,so mußt du das Programm|ändern!",1," INFO | Geht ",a|
  2918.     IF a|=1
  2919.       ALERT 3,"Die Variabeln für den|Druckertreiber stehen in der|Procedure VORBEREITUNG und|sind mit Kommentar versehen",1,"Viel|Erfolg|Hilfe",a|
  2920.       IF a|=3
  2921.         ALERT 3,"Wenn's immer noch nicht klappt|ruf mich einmal an!|Tel.:0 64 24 / 45 04 n. 18:00h",1,"Mach|ich",a|
  2922.       ENDIF
  2923.     ENDIF
  2924.     @cl_s
  2925.     @ausgabe_ab_zeile(oberste%+1)
  2926.     @menueleiste
  2927.     DEFMOUSE pfeil$
  2928.   CASE "a","A"
  2929.     OB_STATE(r_einstell%,ascmod&)=0
  2930.     OB_STATE(r_einstell%,twmod&)=8
  2931.     asc!=TRUE
  2932.     tw!=FALSE
  2933.   CASE "t","T"
  2934.     OB_STATE(r_einstell%,ascmod&)=8
  2935.     OB_STATE(r_einstell%,twmod&)=0
  2936.     asc!=FALSE
  2937.     tw!=TRUE
  2938.   CASE "p","P"
  2939.     frei%=FRE(0)
  2940.     frei_zeilen%=max_zeilen%-anzahl_zeilen%
  2941.     ALERT 3,"Freier Speicherplatz:|In Bytes    : "+STR$(frei%)+"|In Zeilen   : "+STR$(frei_zeilen%),1," Okay ",a|
  2942.     DEFMOUSE pfeil$
  2943.   CASE "g","G"
  2944.     @seite_zeigen
  2945.   CASE "n","N"
  2946.     OB_STATE(r_einstell%,trennan&)=0
  2947.     OB_STATE(r_einstell%,trennaus&)=8
  2948.     trenne!=TRUE
  2949.   CASE "v","V"
  2950.     OB_STATE(r_einstell%,trennan&)=8
  2951.     OB_STATE(r_einstell%,trennaus&)=0
  2952.     trenne!=FALSE
  2953.   ENDSELECT
  2954. RETURN
  2955. > PROCEDURE seitenformat
  2956.   LOCAL x&,y&,b&,h&,temp$,zp|,sp|,exit%,okay!
  2957.   zp|=CRSLIN
  2958.   sp|=CRSCOL
  2959.   DEFMOUSE crs1$
  2960.   PRINT CHR$(27)+"f";
  2961.   '
  2962.   ' Alte Tabpos löschen
  2963.   '
  2964.   IF tabulator%>0
  2965.     FOR i|=1 TO zlen% STEP tabulator%
  2966.       tabulator!(i|)=FALSE
  2967.     NEXT i|
  2968.     tabulator!(1)=FALSE
  2969.   ENDIF
  2970.   ARRAYFILL seiten!(),FALSE
  2971.   '
  2972.   CHAR{{OB_SPEC(r_seitenform%,sfrmpl&)}}=STR$(papierlen%)
  2973.   CHAR{{OB_SPEC(r_seitenform%,sfrmak&)}}=STR$(kopfob%)
  2974.   CHAR{{OB_SPEC(r_seitenform%,sfrmao&)}}=STR$(aboben%)
  2975.   CHAR{{OB_SPEC(r_seitenform%,sfrmau&)}}=STR$(abunten%)
  2976.   CHAR{{OB_SPEC(r_seitenform%,sfrmaf&)}}=STR$(fuss%)
  2977.   CHAR{{OB_SPEC(r_seitenform%,sfrmkol&)}}=kopfl$
  2978.   CHAR{{OB_SPEC(r_seitenform%,sfrmkom&)}}=kopfm$
  2979.   CHAR{{OB_SPEC(r_seitenform%,sfrmkor&)}}=kopfr$
  2980.   CHAR{{OB_SPEC(r_seitenform%,sfrmful&)}}=fussl$
  2981.   CHAR{{OB_SPEC(r_seitenform%,sfrmfum&)}}=fussm$
  2982.   CHAR{{OB_SPEC(r_seitenform%,sfrmfur&)}}=fussr$
  2983.   CHAR{{OB_SPEC(r_seitenform%,sfrmtab&)}}=STR$(tabulator%)
  2984.   CHAR{{OB_SPEC(r_seitenform%,sfrmlr&)}}=STR$(lrand%)
  2985.   CHAR{{OB_SPEC(r_seitenform%,sfrmrr&)}}=STR$(rrand%)
  2986.   seitelen%=papierlen%-(kopfob%+aboben%+abunten%+fuss%)
  2987.   '  CHAR{{OB_SPEC(r_seitenform,sfrmdrl&)}}=STR$(seitelen%)
  2988.   REPEAT
  2989.     ~FORM_CENTER(r_seitenform%,x&,y&,b&,h&)
  2990.     GET x&-3,y&-3,x&+b&,y&+h&,temp$
  2991.     ~OBJC_DRAW(r_seitenform%,0,7,0,0,640,400)
  2992.     TEXT 254,242,"  "
  2993.     TEXT 254,242,STR$(seitelen%)
  2994.     exit%=FORM_DO(r_seitenform%,sfrmpl&)
  2995.     papierlen%=VAL(CHAR{{OB_SPEC(r_seitenform%,sfrmpl&)}})
  2996.     kopfob%=VAL(CHAR{{OB_SPEC(r_seitenform%,sfrmak&)}})
  2997.     aboben%=VAL(CHAR{{OB_SPEC(r_seitenform%,sfrmao&)}})
  2998.     abunten%=VAL(CHAR{{OB_SPEC(r_seitenform%,sfrmau&)}})
  2999.     fuss%=VAL(CHAR{{OB_SPEC(r_seitenform%,sfrmaf&)}})
  3000.     kopfl$=CHAR{{OB_SPEC(r_seitenform%,sfrmkol&)}}
  3001.     kopfm$=CHAR{{OB_SPEC(r_seitenform%,sfrmkom&)}}
  3002.     kopfr$=CHAR{{OB_SPEC(r_seitenform%,sfrmkor&)}}
  3003.     fussl$=CHAR{{OB_SPEC(r_seitenform%,sfrmful&)}}
  3004.     fussm$=CHAR{{OB_SPEC(r_seitenform%,sfrmfum&)}}
  3005.     fussr$=CHAR{{OB_SPEC(r_seitenform%,sfrmfur&)}}
  3006.     tabulator%=VAL(CHAR{{OB_SPEC(r_seitenform%,sfrmtab&)}})
  3007.     lrand%=VAL(CHAR{{OB_SPEC(r_seitenform%,sfrmlr&)}})
  3008.     zlen%=VAL(CHAR{{OB_SPEC(r_seitenform%,sfrmrr&)}})
  3009.     seitelen%=papierlen%-(kopfob%+aboben%+abunten%+fuss%)
  3010.     ~OBJC_CHANGE(r_seitenform%,exit%,0,x&,y&,b&,h&,0,0)
  3011.     PUT x&-3,y&-3,temp$
  3012.     IF exit%=sfrmok&
  3013.       IF seitelen%>1  !seitelen%>5 AND seitelen%<80
  3014.         OPTION BASE 0
  3015.         FOR i%=0 TO max_zeilen%-1 STEP seitelen%
  3016.           seiten!(i%)=TRUE
  3017.         NEXT i%
  3018.         FOR i|=0 TO seitelen%-1
  3019.           seiten!(i|)=FALSE
  3020.         NEXT i|
  3021.         OPTION BASE 1
  3022.         okay!=TRUE
  3023.       ELSE
  3024.         ALERT 3,"Fehler beim Seitenformat|Bitte Handbuch lesen und|Werte prüfen!",1,"Nochmal",a%
  3025.         DEFMOUSE pfeil$
  3026.       ENDIF
  3027.     ENDIF
  3028.   UNTIL okay!
  3029.   IF tabulator%>0
  3030.     FOR i|=1 TO zlen% STEP tabulator%
  3031.       tabulator!(i|)=TRUE
  3032.     NEXT i|
  3033.     tabulator!(1)=FALSE
  3034.   ENDIF
  3035.   DEFMOUSE pfeil$
  3036.   @tableiste
  3037.   PRINT CHR$(27)+"e";
  3038.   PRINT AT(sp|,zp|);
  3039. RETURN
  3040. > PROCEDURE einstellung_grafik
  3041.   DEFFILL 1,2,8
  3042.   PBOX 118,59,520,359
  3043.   DEFFILL 0
  3044.   PBOX 124,65,514,353
  3045.   DEFFILL 1,2,8
  3046.   TEXT 220,87,"-- Druckereinstellung --"
  3047.   LINE 124,97,518,97
  3048.   LINE 122,103,516,103
  3049.   TEXT 134,129,"Near Leader Quality NLQ  :"
  3050.   TEXT 134,154,"Schmalschrift            :"
  3051.   TEXT 134,179,"Proportional             :"
  3052.   TEXT 134,204,"Schriftart PICA          :"
  3053.   TEXT 134,229,"Schriftart ELITE         :"
  3054.   TEXT 134,254,"Kursivschrift            :"
  3055.   TEXT 134,279,"Zeile zweimal Drucken    :"
  3056.   DEFFILL 1,2,8
  3057.   PBOX 132,321,506,347
  3058.   DEFFILL 1,0
  3059.   PBOX 134,323,504,345
  3060.   TEXT 240,339,"Einstellung Fertig"
  3061.   @buttons_zeigen
  3062. RETURN
  3063. > PROCEDURE buttons_zeigen
  3064.   LOCAL z%,i%
  3065.   DEFFILL 0
  3066.   PBOX 348,112,485,283
  3067.   DEFFILL 1,2,8
  3068.   GRAPHMODE 3
  3069.   z%=1
  3070.   FOR i%=113 TO 281 STEP 25
  3071.     IF par!(z%)
  3072.       PBOX 350,i%,408,i%+17
  3073.       BOX 424,i%,482,i%+17
  3074.     ELSE
  3075.       PBOX 424,i%,482,i%+17
  3076.       BOX 350,i%,408,i%+17
  3077.     ENDIF
  3078.     TEXT 370,i%+14,"Ja"
  3079.     TEXT 437,i%+14,"Nein"
  3080.     INC z%
  3081.   NEXT i%
  3082.   GRAPHMODE 1
  3083. RETURN
  3084. > PROCEDURE einstellung_select
  3085.   LOCAL mx&,my&,mk|
  3086.   DEFMOUSE crs1$
  3087.   REPEAT
  3088.     MOUSE mx&,my&,mk|
  3089.     IF mk|=1
  3090.       IF (mx&>350 AND mx&<408) OR (mx&>424 AND mx&<482)
  3091.         SELECT my&
  3092.         CASE 113 TO 130                         ! NLQ wählen
  3093.           IF mx&>350 AND mx&<408
  3094.             par!(1)=TRUE
  3095.             par!(2)=FALSE
  3096.           ELSE IF mx&>424 AND mx&<482
  3097.             par!(1)=FALSE
  3098.           ENDIF
  3099.         CASE 138 TO 155                         ! Schmalschrift
  3100.           IF mx&>350 AND mx&<408
  3101.             par!(2)=TRUE
  3102.             par!(1)=FALSE
  3103.             par!(3)=FALSE
  3104.           ELSE IF mx&>424 AND mx&<482
  3105.             par!(2)=FALSE
  3106.             par!(5)=TRUE
  3107.           ENDIF
  3108.         CASE 163 TO 180                         ! Proportional
  3109.           IF mx&>350 AND mx&<408
  3110.             par!(3)=TRUE
  3111.             par!(2)=FALSE
  3112.             par!(4)=FALSE
  3113.             par!(5)=FALSE
  3114.           ELSE IF mx&>424 AND mx&<482
  3115.             par!(3)=FALSE
  3116.             par!(5)=TRUE
  3117.           ENDIF
  3118.         CASE 188 TO 205                         ! Pica
  3119.           IF mx&>350 AND mx&<408
  3120.             par!(3)=FALSE
  3121.             par!(4)=TRUE
  3122.             par!(5)=FALSE
  3123.           ELSE IF mx&>424 AND mx&<482
  3124.             par!(4)=FALSE
  3125.             par!(5)=TRUE
  3126.           ENDIF
  3127.         CASE 213 TO 230                         ! Elite
  3128.           IF mx&>350 AND mx&<408
  3129.             par!(3)=FALSE
  3130.             par!(5)=TRUE
  3131.             par!(4)=FALSE
  3132.           ELSE IF mx&>424 AND mx&<482
  3133.             par!(5)=FALSE
  3134.             par!(4)=TRUE
  3135.           ENDIF
  3136.         CASE 238 TO 255                         ! Doppeldruck
  3137.           IF mx&>350 AND mx&<408
  3138.             par!(6)=TRUE
  3139.           ELSE IF mx&>424 AND mx&<482
  3140.             par!(6)=FALSE
  3141.           ENDIF
  3142.         CASE 263 TO 280                         ! Zeile zweimal drucken
  3143.           IF mx&>350 AND mx&<408
  3144.             par!(7)=TRUE
  3145.           ELSE IF mx&>424 AND mx&<482
  3146.             par!(7)=FALSE
  3147.           ENDIF
  3148.         ENDSELECT
  3149.         @buttons_zeigen
  3150.       ELSE IF my&>323 AND my&<345
  3151.         IF mx&>134 AND mx&<504
  3152.           mk|=4
  3153.         ENDIF
  3154.       ENDIF
  3155.     ENDIF
  3156.   UNTIL mk|=4 OR INKEY$=CHR$(13)
  3157.   druck$=""
  3158.   IF par!(1)
  3159.     druck$=druck$+nlq$
  3160.   ELSE
  3161.     druck$=druck$+nlqaus$
  3162.   ENDIF
  3163.   IF par!(2)=TRUE
  3164.     druck$=druck$+schmal$
  3165.   ELSE
  3166.     druck$=druck$+schmalaus$
  3167.   ENDIF
  3168.   IF par!(3)
  3169.     druck$=druck$+prop$
  3170.   ELSE
  3171.     druck$=druck$+propaus$
  3172.   ENDIF
  3173.   IF par!(4)
  3174.     IF zlen%>65
  3175.       ALERT 1,"ACHTUNG:|Der Text wird auf PICA|umformatiert!|Wirklich ausführen ???",1," Ja | Nein ",a|
  3176.       DEFMOUSE pfeil$
  3177.       IF a|=1
  3178.         druck$=druck$+pica$
  3179.         zlen%=65
  3180.         @textformat(1,anzahl_zeilen%)
  3181.         @tableiste
  3182.       ELSE
  3183.         druck$=druck$+elite$
  3184.       ENDIF
  3185.     ENDIF
  3186.   ELSE
  3187.     druck$=druck$+elite$
  3188.   ENDIF
  3189.   IF par!(5)
  3190.     druck$=druck$+elite$
  3191.   ELSE
  3192.     druck$=druck$+pica$
  3193.   ENDIF
  3194.   IF par!(6)
  3195.     druck$=druck$+kur$
  3196.   ELSE
  3197.     druck$=druck$+kuraus$
  3198.   ENDIF
  3199.   DEFMOUSE pfeil$
  3200. RETURN
  3201. ' ----------------------------------------------------------------------------
  3202. ' Formatieren des Textes, der Zeilen, prüfen von Zeilen
  3203. ' ----------------------------------------------------------------------------
  3204. > PROCEDURE format_absatz
  3205.   LOCAL sp|,zp|,z|,rest$
  3206.   sp|=CRSCOL
  3207.   zp|=CRSLIN
  3208.   z|=1
  3209.   IF RIGHT$(zeile$(nr%))<>CHR$(174)
  3210.     REPEAT
  3211.       p|=INSTR(zeile$(nr%+z|)," ")
  3212.       IF p|
  3213.         IF LEN(zeile$(nr%+z|-1))+p|<zlen%
  3214.           zeile$(nr%+z|-1)=zeile$(nr%+z|-1)+LEFT$(zeile$(nr%+z|),p|)
  3215.           PRINT AT(1,zp|+z|-1);CHR$(27)+"l";zeile$(nr%+z|-1);AT(sp|,zp|);
  3216.           zeile$(nr%+z|)=MID$(zeile$(nr%+z|),p|+1)
  3217.           IF zp|+z|<24
  3218.             PRINT AT(1,zp|+z|);CHR$(27)+"l";zeile$(nr%+z|);AT(sp|,zp|);
  3219.           ENDIF
  3220.           INC z|
  3221.         ELSE
  3222.           p|=0
  3223.         ENDIF
  3224.       ELSE
  3225.         p|=0
  3226.       ENDIF
  3227.     UNTIL p|=0 OR RIGHT$(zeile$(nr%+z|-1))=CHR$(174) OR LEN(zeile$(nr%+z|-1))+p|>zlen%
  3228.   ENDIF
  3229.   @menueleiste
  3230. RETURN
  3231. > PROCEDURE format_zurueck
  3232.   LOCAL sp|,zp|,rest$,p|,p1|,z&
  3233.   sp|=CRSCOL
  3234.   zp|=CRSLIN
  3235.   z&=1
  3236.   '  ALERT 1,"fromat_zurueck Von,    bis|"+STR$(von%)+"   "+STR$(bis%)+"|"+STR$(anzahl_zeilen%),1,"sadf",a
  3237.   IF insertmode!
  3238.     zeile$(nr%)=LEFT$(zeile$(nr%),sp|-1)+taste$+MID$(zeile$(nr%),sp|)
  3239.   ELSE
  3240.     IF sp|>laenge%
  3241.       zeile$(nr%)=LEFT$(zeile$(nr%),sp|)+taste$+MID$(zeile$(nr%),sp|)
  3242.     ELSE
  3243.       MID$(zeile$(nr%),sp|)=taste$
  3244.     ENDIF
  3245.   ENDIF
  3246.   IF RIGHT$(zeile$(nr%))<>CHR$(174)
  3247.     REPEAT
  3248.       p|=RINSTR(zlen%,zeile$(nr%+z&-1)," ")
  3249.       IF p|
  3250.         rest$=MID$(zeile$(nr%+z&-1),p|+1)
  3251.         zeile$(nr%+z&-1)=LEFT$(zeile$(nr%+z&-1),p|)
  3252.         IF RIGHT$(rest$)<>" " AND rest$<>" "
  3253.           rest$=rest$+" "
  3254.         ENDIF
  3255.         zeile$(nr%+z&)=rest$+zeile$(nr%+z&)
  3256.         CLR rest$
  3257.         PRINT AT(1,zp|+z&-1);CHR$(27)+"l";zeile$(nr%+z&-1);AT(sp|,zp|);
  3258.         IF zp|+z&<24 AND LEN(zeile$(nr%+z&))<zlen%
  3259.           PRINT AT(1,zp|+z&);CHR$(27)+"l";zeile$(nr%+z&);AT(sp|,zp|);
  3260.         ENDIF
  3261.         INC z&
  3262.       ELSE
  3263.         p|=0
  3264.       ENDIF
  3265.     UNTIL p|=0 OR RIGHT$(zeile$(nr%+z&-1))=CHR$(174) OR nr%+z&>=anzahl_zeilen%
  3266.   ELSE
  3267.     p|=RINSTR(zlen%,zeile$(nr%)," ")
  3268.     p1|=RINSTR(zlen%,zeile$(nr%),"-")
  3269.     p|=MAX(p|,p1|)
  3270.     rest$=MID$(zeile$(nr%),p|+1)
  3271.     zeile$(nr%)=LEFT$(zeile$(nr%),p|)!+taste$
  3272.     PRINT AT(1,zp|);CHR$(27)+"l";zeile$(nr%)
  3273.     IF zp|<23
  3274.       PRINT AT(1,zp|+1);CHR$(27)+"L";rest$
  3275.       INSERT zeile$(nr%+1)=rest$
  3276.     ELSE
  3277.       @scroll_rauf
  3278.       DEC zp|
  3279.       PRINT AT(1,zp|+1);CHR$(27)+"L";rest$
  3280.       INSERT zeile$(nr%+1)=rest$
  3281.     ENDIF
  3282.   ENDIF
  3283.   @menueleiste
  3284. RETURN
  3285. > PROCEDURE trenn
  3286.   LOCAL sp|,zp|,p|,p1|,rest$,laenge|,spa|,spos|,trennen$
  3287.   nr%=oberste%-2+CRSLIN
  3288.   sp|=CRSCOL
  3289.   zp|=CRSLIN
  3290.   p|=RINSTR(zeile$(nr%)," ")
  3291.   p1|=RINSTR(zeile$(nr%),"-")
  3292.   IF p1|>p|
  3293.     p|=p1|
  3294.   ENDIF
  3295.   IF p|
  3296.     rest$=RIGHT$(zeile$(nr%),LEN(zeile$(nr%))-p|)+taste$
  3297.     IF trenne!
  3298.       p1|=INSTR(rest$," ")
  3299.       IF p1|>0
  3300.         @silbentrennung(LEFT$(rest$,p1|),trennstelle|)
  3301.       ELSE
  3302.         @silbentrennung(rest$,trennstelle|)
  3303.       ENDIF
  3304.     ELSE
  3305.       trennstelle|=0
  3306.     ENDIF
  3307.     IF trennstelle|>0
  3308.       ADD p|,trennstelle|-1
  3309.       rest$=RIGHT$(rest$,LEN(rest$)-trennstelle|+1)
  3310.     ENDIF
  3311.     IF links! ! Linksbündig im Speicher
  3312.       IF trennstelle|>0
  3313.         zeile$(nr%)=LEFT$(zeile$(nr%),p|)+"-"
  3314.       ELSE
  3315.         zeile$(nr%)=LEFT$(zeile$(nr%),p|)
  3316.       ENDIF
  3317.     ELSE IF rechts! !rechtsbündig im Speicher
  3318.       IF trennstelle|>0
  3319.         zeile$(nr%)=LEFT$(zeile$(nr%),p|)+"-"
  3320.       ELSE
  3321.         zeile$(nr%)=LEFT$(zeile$(nr%),p|)
  3322.       ENDIF
  3323.       zeile$(nr%)=SPACE$(zlen%-LEN(zeile$(nr%)))+zeile$(nr%)
  3324.     ELSE IF zentre!
  3325.       zeile$(nr%)=LEFT$(zeile$(nr%),p|)
  3326.       laenge|=LEN(zeile$(nr%))
  3327.       spa|=zlen%/2-(TRUNC(laenge|/2))
  3328.       zeile$(nr%)=SPACE$(spa|)+zeile$(nr%)
  3329.     ELSE IF blocksatz!
  3330.       IF trennstelle|>0
  3331.         zeile$(nr%)=LEFT$(zeile$(nr%),p|)+"-"
  3332.       ELSE
  3333.         zeile$(nr%)=LEFT$(zeile$(nr%),p|)
  3334.       ENDIF
  3335.       spos|=1
  3336.       IF INSTR(zeile$(nr%)," ")
  3337.         REPEAT
  3338.           laenge|=LEN(zeile$(nr%))
  3339.           spa|=INSTR(spos|,zeile$(nr%)," ")
  3340.           IF spa|
  3341.             zeile$(nr%)=LEFT$(zeile$(nr%),spa|-1)+" "+MID$(zeile$(nr%),spa|)
  3342.             spos|=spa|+2
  3343.           ELSE
  3344.             IF laenge|<zlen%
  3345.               spos|=1
  3346.             ENDIF
  3347.           ENDIF
  3348.         UNTIL laenge|>=zlen%-1
  3349.       ENDIF
  3350.     ENDIF
  3351.     PRINT AT(1,zp|);CHR$(27)+"l";AT(1,zp|);zeile$(nr%)
  3352.     INC nr%
  3353.     INC zp|
  3354.     INSERT zeile$(nr%)=rest$
  3355.     IF zp|>24
  3356.       @scroll_rauf
  3357.       zp|=24
  3358.     ENDIF
  3359.     PRINT AT(1,zp|);CHR$(27)+"l";
  3360.     PRINT AT(1,zp|);zeile$(nr%);
  3361.     PRINT AT(1+LEN(zeile$(nr%)),zp|);CHR$(27)+"e";
  3362.   ENDIF
  3363. RETURN
  3364. > PROCEDURE textformat(von%,bis%)
  3365.   LOCAL rest%,p|,p1|
  3366.   IF anzahl_zeilen%>1
  3367.     IF RIGHT$(zeile$(bis%))<>CHR$(174)
  3368.       bis%=anzahl_zeilen%
  3369.     ENDIF
  3370.     IF links!
  3371.       IF von%>0 AND von%<=anzahl_zeilen% AND bis%>von% AND bis%<=anzahl_zeilen%
  3372.         FOR i%=von% TO bis%
  3373.           zeile$(i%)=TRIM$(zeile$(i%))
  3374.           laenge|=LEN(zeile$(i%))
  3375.           IF laenge|>zlen%
  3376.             p|=RINSTR(zlen%,zeile$(i%)," ")
  3377.             p1|=RINSTR(zlen%,zeile$(i%),"-")
  3378.             IF p1|>p|
  3379.               p|=p1|
  3380.             ENDIF
  3381.             rest$=MID$(zeile$(i%),p|)
  3382.             zeile$(i%)=LEFT$(zeile$(i%),p|)
  3383.             IF zeile$(i%+1)<>""
  3384.               zeile$(i%+1)=rest$+zeile$(i%+1)
  3385.             ELSE
  3386.               INSERT zeile$(i%+1)=rest$
  3387.               INC anzahl_zeilen%
  3388.             ENDIF
  3389.           ENDIF
  3390.           FOR l|=1 TO LEN(zeile$(i%))
  3391.             IF MID$(zeile$(i%),l|,1)=" "
  3392.               REPEAT
  3393.                 t$=MID$(zeile$(i%),l|+1,1)
  3394.                 IF t$=CHR$(32)
  3395.                   zeile$(i%)=LEFT$(zeile$(i%),l|)+MID$(zeile$(i%),l|+2)
  3396.                 ENDIF
  3397.               UNTIL t$<>CHR$(32)
  3398.             ENDIF
  3399.           NEXT l|
  3400.         NEXT i%
  3401.         oberste%=0
  3402.         @ausgabe_ab_zeile(oberste%+1)
  3403.       ENDIF
  3404.     ELSE IF rechts!
  3405.       IF von%<anzahl_zeilen% AND bis%<=anzahl_zeilen%
  3406.         FOR i%=von% TO bis%
  3407.           zeile$(i%)=TRIM$(zeile$(i%))
  3408.           zeile$(nr%)=SPACE$(zlen%-LEN(zeile$(nr%)))+zeile$(nr%)
  3409.         NEXT i%
  3410.         @ausgabe_ab_zeile(oberste%+1)
  3411.       ENDIF
  3412.     ELSE IF zentre!
  3413.       IF von%<anzahl_zeilen% AND bis%<=anzahl_zeilen%
  3414.         FOR i%=von% TO bis%
  3415.           zeile$(i%)=TRIM$(zeile$(i%))
  3416.           laenge|=LEN(zeile$(i%))
  3417.           spa|=zlen%/2-(TRUNC(laenge|/2))
  3418.           zeile$(i%)=SPACE$(spa|)+zeile$(i%)
  3419.         NEXT i%
  3420.         @ausgabe_ab_zeile(oberste%+1)
  3421.       ENDIF
  3422.     ELSE IF blocksatz!
  3423.       IF von%<anzahl_zeilen% AND bis%<=anzahl_zeilen%
  3424.         FOR i%=von% TO bis%
  3425.           zeile$(i%)=TRIM$(zeile$(i%))
  3426.           spos|=1
  3427.           IF INSTR(zeile$(i%)," ")
  3428.             REPEAT
  3429.               laenge|=LEN(zeile$(i%))
  3430.               sp|=INSTR(spos|,zeile$(i%)," ")
  3431.               IF sp|
  3432.                 zeile$(i%)=LEFT$(zeile$(i%),sp|-1)+" "+MID$(zeile$(i%),sp|)
  3433.                 spos|=sp|+2 !INSTR(sp%+1,zeile$(nr%)," ")
  3434.               ELSE
  3435.                 IF laenge|<zlen%
  3436.                   spos|=1
  3437.                 ENDIF
  3438.               ENDIF
  3439.             UNTIL laenge|>=zlen%-1
  3440.           ENDIF
  3441.         NEXT i%
  3442.         @ausgabe_ab_zeile(oberste%+1)
  3443.       ENDIF
  3444.     ENDIF
  3445.     @menueleiste
  3446.   ENDIF
  3447. RETURN
  3448. > PROCEDURE zeile_testen(VAR zeile$)
  3449.   LOCAL z$
  3450.   FOR l|=1 TO LEN(zeile$)
  3451.     z$=MID$(zeile$,l|,1)
  3452.     SELECT z$
  3453.     CASE "ä"
  3454.       z$=CHR$(123)
  3455.     CASE "ü"
  3456.       z$=CHR$(125)
  3457.     CASE "ö"
  3458.       z$=CHR$(124)
  3459.     CASE "Ä"
  3460.       z$=CHR$(91)
  3461.     CASE "Ü"
  3462.       z$=CHR$(93)
  3463.     CASE "Ö"
  3464.       z$=CHR$(92)
  3465.     CASE "ß"
  3466.       z$=CHR$(126)
  3467.     CASE "§"
  3468.       z$=CHR$(64)
  3469.     ENDSELECT
  3470.     MID$(zeile$,l|,1)=z$
  3471.   NEXT l|
  3472. RETURN
  3473. > PROCEDURE silbentrennung(wort$,VAR pos|)
  3474.   ' gibt eine Trennstelle zurück, die nach Pos liegt
  3475.   pos|=0
  3476.   kflag!=FALSE
  3477.   IF LEN(wort$)>4 THEN
  3478.     ' nur Worte testen, die lang genug sind
  3479.     REPEAT
  3480.       IF pos|=1 THEN
  3481.         ' Vorsilbentest nur durchführen, wenn am Wortanfang
  3482.         FOR i|=1 TO 24
  3483.           IF INSTR(UPPER$(wort$),UPPER$(vorsilbe$(i|)))=1 THEN
  3484.             ' Vorsilbe gefunden
  3485.             pos|=LEN(vorsilbe$(i|))+1
  3486.           ENDIF
  3487.         NEXT i|
  3488.       ENDIF
  3489.       ' wenn keine Vorsilbe in Frage kommt, normal trennen
  3490.       IF pos|=0 THEN
  3491.         ' ersten Vokal im Wort suchen
  3492.         stelle|=pos|
  3493.         WHILE (INSTR(vokalmenge$,MID$(wort$,stelle|,1))=0) AND (stelle|<=LEN(wort$))
  3494.           INC stelle|
  3495.         WEND
  3496.         ' Stelle zeigt jetzt auf ersten Vokal oder Wortende
  3497.         IF stelle|<LEN(wort$)-1 THEN
  3498.           ' nächsten Konsonanten suchen
  3499.           REPEAT
  3500.             INC stelle|
  3501.           UNTIL (INSTR(vokalmenge$,MID$(wort$,stelle|,1))=0) OR (stelle|>=LEN(wort$))
  3502.           ' zweiten Vokal nach POS suchen
  3503.           WHILE (INSTR(vokalmenge$,MID$(wort$,stelle|,1))=0) AND (stelle|<=LEN(wort$))
  3504.             INC stelle|
  3505.           WEND
  3506.           IF stelle|<=LEN(wort$) THEN
  3507.             pos|=stelle|-1
  3508.             ' Trennmöglichkeit = Konsonant vor zweitem Vokal
  3509.           ENDIF
  3510.         ENDIF
  3511.       ENDIF
  3512.       ' Trennmöglichkeit auf Gültigkeit überprüfen
  3513.       IF pos|<>0 THEN
  3514.         ' nicht trennbare Kombinationen ausschließen
  3515.         sch|=INSTR(UPPER$(wort$),"SCH")
  3516.         IF (sch|<>0) AND ((sch|=pos|-2) OR (sch|=pos|-3)) THEN
  3517.           ' vor SCH trennen
  3518.           pos|=sch|
  3519.         ENDIF
  3520.         IF INSTR(nichttrennen$,MID$(wort$,pos|-1,2))<>0 THEN
  3521.           ' vor nicht-trennbarer Kombination trennen
  3522.           DEC pos|
  3523.         ENDIF
  3524.         IF MID$(wort$,pos|-1,2)="ck" THEN
  3525.           ' ck wird als kk getrennt, deshalb Flag setzen
  3526.           kflag!=TRUE
  3527.         ENDIF
  3528.         IF (pos|<=2) OR (pos|>=LEN(wort$)) THEN
  3529.           stelle|=0
  3530.           pos|=0
  3531.         ENDIF
  3532.       ENDIF
  3533.     UNTIL (pos|<>0) OR (stelle|>=LEN(wort$)-1)
  3534.   ENDIF
  3535. RETURN
  3536. > PROCEDURE seitenummer_drucken(VAR s$)
  3537.   LOCAL p|,seite$
  3538.   p|=INSTR(s$,"#")
  3539.   IF p|
  3540.     seite$=STR$(INT(i%/seitelen%)+1)
  3541.     IF LEN(seite$)=1
  3542.       MID$(s$,p|,1)=seite$
  3543.     ELSE
  3544.       s$=LEFT$(s$,p|-1)+seite$+MID$(s$,p|+1)
  3545.     ENDIF
  3546.   ENDIF
  3547. RETURN
  3548. > PROCEDURE sheet(a%,b%,c%,d%,e%)
  3549.   DEFFILL 1,1,1
  3550.   PBOX a%+e%,b%+e%,c%+e%,d%+e%
  3551.   DEFFILL 1,0,0
  3552.   PBOX a%,b%,c%,d%
  3553.   BOX a%+1,b%+1,c%-1,d%-1
  3554. RETURN
  3555. > PROCEDURE head(a%,b%,c%,a$)
  3556.   DEFFILL 1,1,1
  3557.   PBOX a%+2,b%+2,c%+2,b%+19
  3558.   DEFFILL 1,2,4
  3559.   PBOX a%,b%,c%,b%+17
  3560.   pos%=a%+(c%-a%)/2-((LEN(a$)+2)/2)*8
  3561.   TEXT pos%,b%+14," "+a$+" "
  3562. RETURN
  3563. > PROCEDURE tbc
  3564.   REPEAT
  3565.     z$=INKEY$
  3566.   UNTIL z$=""
  3567. RETURN
  3568. > PROCEDURE seite_zeigen
  3569.   LOCAL cc$,se|,sp|,zp|
  3570.   sp|=CRSCOL
  3571.   zp|=CRSLIN
  3572.   se|=INT((oberste%-2+zp|-1)/seitelen%)
  3573.   GET 95,25,280,91+4*seitelen%,cc$
  3574.   @sheet(95,25,275,86+4*seitelen%,5)
  3575.   @head(100,30,270,"Übersicht S."+STR$(1+se|))
  3576.   FOR i%=1 TO seitelen%
  3577.     FOR j%=1 TO LEN(zeile$((se|*seitelen%)+i%))  !zlen%
  3578.       IF MID$(zeile$(se|*seitelen%+i%),j%,1)<>" "
  3579.         BOX 103+2*j%,48+4*i%,103+2*j%,50+4*i%
  3580.       ENDIF
  3581.     NEXT j%
  3582.   NEXT i%
  3583.   @sheet(102,60+4*seitelen%,267,79+4*seitelen%,2)
  3584.   TEXT 177,75+4*seitelen%,"Ok"
  3585.   '  REPEAT
  3586.   '  MOUSE x%,y%,k%
  3587.   '  i$=INKEY$
  3588.   ' UNTIL i$=CHR$(13) OR (k%=1 AND x%>102 AND x%<267 AND y%>60+4*m.ax% AND y%<79+4*m.ax%)
  3589.   REPEAT
  3590.   UNTIL INKEY$<>"" OR MOUSEK
  3591.   PUT 95,25,cc$
  3592.   PRINT AT(sp|,zp|);
  3593. RETURN
  3594. '
  3595. vorsilben:
  3596. DATA heraus,unter,hinunter,silben,trenn
  3597. DATA ab,an,bei,be,er,ge,feg,fe,um,un,ur,zu,ok
  3598. DATA auf,aus,dar,ein,ent,her,hin,miß,ver,vor,weg,zer
  3599. DATA nach,über
  3600.